java frame - RESTful auf Play! Rahmen





in add (6)


Die Integration in eine JAX-RS-Implementierung ist ein möglicher alternativer Ansatz zur Verwendung des in Play integrierten HTTP-Routings. Für ein RESEasy-Beispiel siehe das RESTEasy Play! Modul .

Dieser Ansatz ist sinnvoll, wenn Sie bereits in JAX-RS investiert sind oder wenn Sie einige der erweiterten Funktionen benötigen, die JAX-RS bietet, wie z. B. Content-Negotiation. Wenn nicht, wäre es einfacher, Play direkt zu verwenden, um JSON oder XML als Antwort auf HTTP-Anfragen zu liefern.

Wir planen ein Projekt, das primär Inhalte für mobile Apps bereitstellt, aber eine Website haben muss.

Meine Frage ist, ob es Sinn macht, Jersey oder Restlet zu verwenden, um REST-APIs für unsere mobilen Apps zu entwickeln, und dann Play! um die Website zu bedienen.

Oder macht es mehr Sinn, einfach nur Play zu verwenden! um alles zu machen? Wenn ja, REST mit Play! Rahmen?







Dies ist immer noch eine beliebte Frage, aber die am häufigsten gewählten Antworten sind mit der aktuellen Version des Spiels nicht aktuell. Hier ist ein funktionierendes REST-Beispiel mit play 2.2.1:

Konf / Routen:

GET     /users                 controllers.UserController.getUsers
GET     /users/:id             controllers.UserController.getUser(id: Long)
POST    /users                 controllers.UserController.createUser
PUT     /users/:id             controllers.UserController.updateUser(id: Long)
DELETE  /users/:id             controllers.UserController.deleteUser(id: Long)

App / Controller / UserController.java:

public static Result getUsers()
{
    List<User> users = Database.getUsers();
    return ok(Json.toJson(users));
}

public static Result getUser(Long id)
{
    User user = Database.getUser(id);
    return user == null ? notFound() : ok(Json.toJson(user));
}

public static Result createUser()
{
    User newUser = Json.fromJson(request().body().asJson(), User.class);
    User inserted = Database.addUser(newUser);
    return created(Json.toJson(inserted));
}

public static Result updateUser(Long id)
{
    User user = Json.fromJson(request().body().asJson(), User.class);
    User updated = Database.updateUser(id, user);
    return ok(Json.toJson(updated));
}

public static Result deleteUser(Long id)
{
    Database.deleteUser(id);
    return noContent(); // http://.com/a/2342589/1415732
}



Verwenden Sie Spielen! um alles zu machen. Das Schreiben von REST-Diensten in Play ist sehr einfach.

Erstens macht es die routes-Datei einfach, Routen zu schreiben, die dem REST-Ansatz entsprechen.

Anschließend schreiben Sie Ihre Aktionen im Controller für jede API-Methode, die Sie erstellen möchten.

Je nachdem, wie Sie das Ergebnis (XML, JSON usw.) zurückgeben möchten, gibt es einige Methoden, die Sie verwenden können. Wenn Sie beispielsweise die renderJSON-Methode verwenden, können die Ergebnisse sehr einfach gerendert werden. Wenn Sie XML rendern möchten, können Sie dies genauso tun, als würden Sie in Ihrer Ansicht ein HTML-Dokument erstellen.

Hier ist ein nettes Beispiel.

Routen-Datei

GET     /user/{id}            Application.getUser(format:'xml')
GET     /user/{id}/json       Application.getUserJSON
POST    /user/                Application.createUser
PUT     /user/{id}            Application.updateUser
DELETE  /user/{id}            Application.deleteUser

Anwendungsdatei

public static void createUser(User newUser) {
    newUser.save();
    renderText("success");
}

public static void updateUser(Long id, User user) {
    User dbUser = User.findById(id);
    dbUser.updateDetails(user); // some model logic you would write to do a safe merge
    dbUser.save();
    renderText("success");
}

public static void deleteUser(Long id) {
    // first check authority
    User.findById(id).delete();
    renderText("success");
}

public static void getUser(Long id)  {
    User user = User.findById(id)
    renderJSON(user);
}

public static void getUserJSON(Long id) {
    User user = User.findById(id)
    renderJSON(user);
}

getUser.xml-Datei

<user>
   <name>${user.name}</name>
   <dob>${user.dob}</dob>
   .... etc etc
</user>






Ich bin verärgert, dass REST als Protokoll nicht unterstützt OOP und Get Methode ist der Beweis. Als Lösung können Sie ein DTO zu JSON serialisieren und anschließend eine Abfragezeichenfolge erstellen. Auf Serverseite können Sie die Abfragezeichenfolge für das DTO deserialisieren.

Sieh dir an:

Nachrichtenbasierter Ansatz kann Ihnen helfen, die Methodenbeschränkung zu lösen. Sie können ein beliebiges DTO wie im Anfragetext senden

Nelibur Web Service Framework bietet Funktionen, die Sie verwenden können

var client = new JsonServiceClient(Settings.Default.ServiceAddress);
var request = new GetClientRequest
    {
        Id = new Guid("2217239b0e-b35b-4d32-95c7-5db43e2bd573")
    };
var response = client.Get<GetClientRequest, ClientResponse>(request);

as you can see, the GetClientRequest was encoded to the following query string

http://localhost/clients/GetWithResponse?type=GetClientRequest&data=%7B%22Id%22:%2217239b0e-b35b-4d32-95c7-5db43e2bd573%22%7D






java rest jersey restlet playframework