2012-07-19 3 views
0

그래서 내가 사용하는 API를 패키지는 플레이 프레임 워크

- controllers 
    - api 
     - Documents // create, update, read, delete, list 
     ... // more controllers 
    - web 
     - Documents // list, read, etc... 
     .. // more controllers 

이 컨트롤러는 로 JSON 데이터를 렌더링 다음과 같은 설정을 가지고와 플레이 1.2.x를 응용 프로그램을 업데이트하고 내 자신의 REST API를 소비 모바일 클라이언트 (Android, iPhone).

이제 API를 사용하는 단순한 html 웹 응용 프로그램을 만들고 싶습니다. 그렇다면 웹 패키지의 컨트롤러에서 API를 어떻게 소비 할 수 있습니까?

저의 목표는 웹 컨트롤러 로직에서 API 컨트롤러 로직을 다시 쓰지 않는 것입니다.

감사합니다.

답변

3

컨트롤러 간의 재사용 방법은 제 생각에는 최선의 방법이 아닙니다. 공유 동작은 모델에 코딩되어야하며 두 컨트롤러는 모두 동일한 모델 방법을 사용할 수 있습니다.

그렇게하고 싶다면 "@Util"로 주석을 달고 웹 컨트롤러에서이 메서드를 호출하면 apis 컨트롤러의 공용 메서드에서 공유 동작을 추출 할 수 있습니다.

+0

그건 의미가 있습니다. 난 그냥 웹 애플 리케이션을위한 별도의 컨트롤러를 다시 작성하는 것 같아요. 어쨌든 대부분의 논리는 모델에서 추상화됩니다. 감사! – Regis

+0

@Regis PS. 그냥 이것을 보았습니다. 저는 여전히 하나의 컨트롤러와 두개의 다른 템플릿을 갖는 것이 더 낫거나/더 쉽다고 생각합니다. 당신이 할 수 있다고 확신합니다! – Stefano

1

질문에 많은 세부 사항이 없으므로 적용 할 수 있는지 잘 모르겠지만 일반적으로 REST API를 구현할 때 응답을 다른 형식 (JSON 및 HTML)으로 제공하고 JSONP 및 XML 예를 들어).

주요 아이디어는 단지

  1. 체크 필요 어떤 형식 알 요청 : 어느 accept content type, the url extension, or even a parameter (및 some more about it)
  2. 를 사용하여 올바른 템플릿을 선택 (또는 이미있는 경우 템플릿을 건너 귀하의 Json 객체를 올바르게 구축했습니다.)

첫 번째 부분을 수행하는 방법에는 여러 가지가 있습니다. 당신의 경로를 통해 : Request Content-Type in Play! Framework for REST webservices; 이에 관한 구체적인 페이지가 Play documentation에 있습니다.

하지만이 답변에서 가장 중요한 부분은 두 번째 요점입니다. 동일한 컨트롤러를 사용해야하며 HTML 템플릿은 JSON으로 보내지는 데이터와 동일한 데이터로 페이지를 렌더링 할 수 있어야합니다 (또는 약간 더)!

NB. 조금 더 커스터마이징 할 필요가 있다면 컨트롤러의 request 객체에 액세스하여 요청한 형식이 무엇인지 확인하고 이에 따라 적절한 템플릿을 사용하여 적절한 데이터를 반환하도록 조치하십시오!

+0

링크를 제공해 주셔서 감사합니다. 나는 그들을 체크 아웃 할 것이다. – Regis