Einführung in Spring Data REST

Einführung in Spring Data REST

1. Überblick

Dieser Artikel erklärt die Grundlagen vonSpring Data REST und zeigt, wie Sie damit eine einfache REST-API erstellen.

Im Allgemeinen baut Spring Data REST auf dem Spring Data-Projekt auf und vereinfacht das Erstellen von hypermediengesteuerten REST-Webdiensten, die eine Verbindung zu Spring Data-Repositorys herstellen - alle mit HAL als Hypermedientyp.

Dies nimmt einen großen Teil der manuellen Arbeit in Anspruch, die normalerweise mit solchen Aufgaben verbunden ist, und vereinfacht die Implementierung der grundlegenden CRUD-Funktionalität für Webanwendungen.

2. Maven-Abhängigkeiten

Die folgenden Maven-Abhängigkeiten werden für unsere einfache Anwendung benötigt:


    org.springframework.boot
    spring-boot-starter


    org.springframework.bootspring-boot-starter-data-rest

    org.springframework.boot
    spring-boot-starter-data-jpa


    com.h2database
    h2

Wir haben uns für Spring Boot entschieden, aber auch für Classic Spring. Wir haben uns auch für die eingebettete H2-Datenbank entschieden, um zusätzliche Einstellungen zu vermeiden. Das Beispiel kann jedoch auf jede Datenbank angewendet werden.

3. Schreiben der Anwendung

Wir beginnen damit, ein Domain-Objekt zu schreiben, das einen Benutzer unserer Website repräsentiert:

@Entity
public class WebsiteUser {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private long id;

    private String name;
    private String email;

    // standard getters and setters
}

Jeder Benutzer hat einen Namen und eine E-Mail sowie eine automatisch generierte ID. Jetzt können wir ein einfaches Repository schreiben:

@RepositoryRestResource(collectionResourceRel = "users", path = "users")
public interface UserRepository extends PagingAndSortingRepository {
    List findByName(@Param("name") String name);
}

Dies ist eine Schnittstelle, über die Sie verschiedene Operationen mitWebsiteUser Objekten ausführen können. Wir haben auch eine benutzerdefinierte Abfrage definiert, die eine Liste von Benutzern basierend auf einem bestimmten Namen bereitstellt.

Die Annotation@RepositoryRestResource ist optional und wird zum Anpassen des REST-Endpunkts verwendet. Wenn wir es weglassen würden, würde Spring automatisch einen Endpunkt bei „/websiteUsers“ anstelle von „/users“ erstellen.

Schließlich schreiben wir einen StandardSpring Boot main class to initialize the application:

@SpringBootApplication
public class SpringDataRestApplication {
    public static void main(String[] args) {
        SpringApplication.run(SpringDataRestApplication.class, args);
    }
}

Das ist es! Wir haben jetzt eine voll funktionsfähige REST-API. Schauen wir uns das in Aktion an.

4. Zugriff auf die REST-API

Wenn wir die Anwendung ausführen und in einem Browser zuhttp://localhost:8080/ wechseln, erhalten wir den folgenden JSON:

{
  "_links" : {
    "users" : {
      "href" : "http://localhost:8080/users{?page,size,sort}",
      "templated" : true
    },
    "profile" : {
      "href" : "http://localhost:8080/profile"
    }
  }
}

Wie Sie sehen können, ist ein Endpunkt "/users" verfügbar, der bereits die Optionen "?page", "?size" und "?sort" enthält.

Es gibt auch einen Standardendpunkt "/profile", der Anwendungsmetadaten bereitstellt. Es ist wichtig zu beachten, dass die Antwort so strukturiert ist, dass sie den Einschränkungen des REST-Architekturstils folgt. Insbesondere bietet es eine einheitliche Schnittstelle und selbstbeschreibende Nachrichten. Dies bedeutet, dass jede Nachricht genügend Informationen enthält, um zu beschreiben, wie die Nachricht verarbeitet wird.

Unsere Anwendung enthält noch keine Benutzer. Wenn Sie also zuhttp://localhost:8080/users gehen, wird nur eine leere Liste der Benutzer angezeigt. Verwenden Sie Curl, um einen Benutzer hinzuzufügen.

$ curl -i -X POST -H "Content-Type:application/json" -d '{  "name" : "Test", \
"email" : "[email protected]" }' http://localhost:8080/users
{
  "name" : "test",
  "email" : "[email protected]",
  "_links" : {
    "self" : {
      "href" : "http://localhost:8080/users/1"
    },
    "websiteUser" : {
      "href" : "http://localhost:8080/users/1"
    }
  }
}

Schauen wir uns auch die Antwort-Header an:

HTTP/1.1 201 Created
Server: Apache-Coyote/1.1
Location: http://localhost:8080/users/1
Content-Type: application/hal+json;charset=UTF-8
Transfer-Encoding: chunked

Sie werden feststellen, dass der zurückgegebene Inhaltstyp "application/hal+json" ist. HAL ist ein einfaches Format, das eine konsistente und einfache Möglichkeit bietet, Hyperlinks zwischen Ressourcen in Ihrer API zu erstellen. Der Header enthält auch automatisch den HeaderLocation. Dies ist die Adresse, mit der wir auf den neu erstellten Benutzer zugreifen können.

Wir können jetzt unterhttp://localhost:8080/users/1 auf diesen Benutzer zugreifen

{
  "name" : "test",
  "email" : "[email protected]",
  "_links" : {
    "self" : {
      "href" : "http://localhost:8080/users/1"
    },
    "websiteUser" : {
      "href" : "http://localhost:8080/users/1"
    }
  }
}

Sie können auch curl oder einen anderen REST-Client verwenden, um PUT-, PATCH- und DELETE-Anforderungen abzusetzen. Es ist auch wichtig zu beachten, dass Spring Data REST automatisch den Prinzipien von HATEOAS folgt. HATEOAS ist eine der Einschränkungen des REST-Architekturstils und bedeutet, dass Hypertext verwendet werden sollte, um sich in der API zurechtzufinden.

Zuletzt versuchen wir, auf die zuvor geschriebene benutzerdefinierte Abfrage zuzugreifen und alle Benutzer mit dem Namen "test" zu finden. Dies erfolgt durch Aufrufen vonhttp://localhost:8080/users/search/findByName?name=test

{
  "_embedded" : {
    "users" : [ {
      "name" : "test",
      "email" : "[email protected]",
      "_links" : {
        "self" : {
          "href" : "http://localhost:8080/users/1"
        },
        "websiteUser" : {
          "href" : "http://localhost:8080/users/1"
        }
      }
    } ]
  },
  "_links" : {
    "self" : {
      "href" : "http://localhost:8080/users/search/findByName?name=test"
    }
  }
}

5. Fazit

[.iframe-fluid] ## In diesem Lernprogramm wurden die Grundlagen zum Erstellen einer einfachen REST-API mit Spring Data REST erläutert. Das in diesem Artikel verwendete Beispiel finden Sie in den verknüpftenGitHub project.