java jsr - Play에서 RESTful! 뼈대




services example (6)

Play 버전 1.2.3에서이 접근법이 깨진 것처럼 보입니다. @seb에서 완료 한 소스를 다운로드하고 이전 github.com/sebhoss/play-user-sample 에서 언급 한 경우 JSON 객체로 POST를 사용하여 새 사용자 객체를 만드는 것이 더 이상 가능하지 않습니다.

json 및 xml POST를 사용하여 작성하는 특정 메소드가 있어야합니다. 약술 : https://groups.google.com/forum/#!topic/play-framework/huwtC3YZDlU

우리는 주로 모바일 앱에 콘텐츠를 제공하는 프로젝트를 계획하고 있지만 웹 사이트가 필요합니다.

제 질문은 저지 또는 Restlet을 사용하여 모바일 앱용 REST API를 개발 한 다음 Play! 웹 사이트를 제공합니다.

아니면 Play를 사용하는 것이 더 합리적입니까? 모든 것을 할 수 있을까요? 그렇다면 Play와 함께 REST를하는 방법! 뼈대?


JAX-RS 구현과의 통합은 Play의 기본 제공 HTTP 라우팅을 사용하는 다른 방법입니다. RESTEasy 예제는 RESTEasy Play! 모듈 .

이 접근법은 이미 JAX-RS에 투자 중이거나 JAX-RS가 제공하는 컨텐츠 협상과 같은 고급 기능 중 일부가 필요할 경우에 유용합니다. 그렇지 않다면 HTTP 요청에 대한 응답으로 JSON 또는 XML을 제공하기 위해 Play를 직접 사용하는 것이 더 간단 할 것입니다.


이것은 여전히 ​​대중적인 질문이지만, 가장 높은 투표 응답은 현재 버전의 연극에서는 최신 정보가 아닙니다. 다음은 게임 2.2.1의 REST 예제입니다.

conf / routes :

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 / controllers / 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
}

재생을 사용하십시오! 모든 것을 할 수 있습니다. Play에서 REST 서비스를 작성하는 것은 매우 쉽습니다.

첫째, routes 파일을 사용하면 REST 방식에 맞는 경로를 쉽게 작성할 수 있습니다.

그런 다음 컨트롤러에 작성하려는 각 API 메소드에 대한 액션을 작성합니다.

결과 (XML, JSON 등)를 반환하는 방법에 따라 사용할 수있는 몇 가지 방법이 있습니다. 예를 들어, renderJSON 메소드를 사용하면 결과를 매우 쉽게 렌더링 할 수 있습니다. XML을 렌더링하고 싶다면보기에서 HTML 문서를 빌드하는 것과 같은 방법으로 XML을 렌더링 할 수있다.

다음은 깔끔한 예입니다.

경로 파일

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

신청서 파일

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 파일

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


당신은 몸으로 GET을 보내거나 POST를 보내고 RESTish 신앙심을 포기할 수 있습니다 (5 년 전만해도 그 믿음의 한 멤버 만있었습니다 - 그의 코멘트는 위에 링크되어 있습니다).

위대한 결정도 아니지만 GET 본문을 보내면 일부 클라이언트 및 일부 서버의 문제를 예방할 수 있습니다.

POST를 수행하면 일부 RESTish 프레임 워크에 장애가 발생할 수 있습니다.

줄리안 레 쉬케 (Julian Reschke)는 위와 같이 "SEARCH"와 같은 비표준 HTTP 헤더를 사용하는 것이 좋습니다.

위의 각각을 할 수 있고 할 수없는 클라이언트를 나열하는 것이 가장 생산적 일 수 있습니다.

내가 아는 몸으로 GET을 보낼 수없는 고객 :

  • XmlHTTPRequest Fiddler

본문과 함께 GET을 보낼 수있는 클라이언트 :

  • 대부분의 브라우저

GET에서 본문을 검색 할 수있는 서버 및 라이브러리 :

  • 아파치
  • PHP

GET에서 본문을 제거하는 서버 (및 프록시) :

  • ?






java rest jersey restlet playframework