2012-01-09 3 views
9

웹 서비스를 통해 (Java) 백엔드와 통신하는 리치 인터넷 웹 응용 프로그램을 개발하는 중입니다. 나는 Flex/Flash와 GWT/Javascript 모두에서 사용자 인터페이스를 프로토 타이핑했으며, 이러한 RIA 플랫폼은 RPC 스타일의 백엔드 통신 방식 (AMF for Flex와 GWT-GWT-RPC for GWT)을 선호하는 경향이 있음을 알았습니다.GWT RIA (Rich Internet Application) 및 REST HATEOAS - 호환 방법은 무엇입니까?

필자의 경우 서버는 필자가 작성하지 않은 웹 서비스도 제공해야합니다. 따라서 표준 기반 웹 서비스 (예 : SOAP 및 REST)에 기대고 있습니다. RIA가 다른 웹 서비스와 동일한 웹 서비스를 사용해야 함을 확신합니다. 경험으로 익숙한 RPC 스타일을 모델링하기 때문에 SOAP를 "얻습니다". 나는 REST를 처음 사용하지만 CXF/Jackson을 사용하여 REST 백엔드를 프로토 타이핑했다. 그러나 현재로서는 내 REST API 인 은 RPC 스타일 API와 같이과 비슷하지만 HATEOAS라는 아이디어를 고수하는 데 어려움을 겪고 있기 때문에 실현되었습니다.

나는 약 10 번 Roy T. Fieldings helpful blog post을 읽었으며 나는 빛을보기 시작했다고 생각한다. 예를 들어, 리소스와 함께 다양한 상태 전환에 대한 링크를 포함한다면 클라이언트와 서버 간의 연결량을 줄일 수 있다는 것이 확실합니다. 내 클라이언트는 그 시점에 표시된 엔티티에서 수행 할 수있는 합법적 인 작업에 대한 액세스 권한을 사용자에게 제공하는 버튼 만 렌더링 할 수 있습니다.

그러나 RIA와 서버 응용 프로그램간에 느슨한 결합이 중요합니까?

본질적으로 RIA는 서버 데이터 모델과 매우 밀접하게 결합되어 있습니다. 상자 밖에서 그들은 많은 것을 전제합니다. 루스 커플 링이 디자인 목표가 아니기 때문에 RPC 스타일 응용 프로그램 프로토콜을 선호하는 이유가 여기에 있습니다. 그러나 우리가 HATEOAS를 진지하게 생각해 보면 훨씬 더 일반적인 RIA 클라이언트를 작성하여 수행 할 수있는 데이터 모델과 운영에 대해 거의 가정을하지 않을 수 있다는 사실을 깨닫기 시작했습니다. 이는 백엔드의 변경을 통해 클라이언트를 유지하기위한 노력의 양을 줄일 수 있습니다. 이 말이 맞습니까? 그 이익이 비용보다 중요한가?

p.s. - 두 가지 세부 사항 -이 애플리케이션은 매우 복잡하고 깊이 중첩 된 데이터 모델을 가지고 있습니다. 또한 누군가가 우리가 100 % 순수 REST 웹 앱이 아니라고 말하면 덜 신경 쓸 수 없습니다.

답변

3

훌륭한 철학적 질문입니다. 내 일반적인 응답은 커플 링이 예상되어야합니다.

자세히 설명해 드리겠습니다. 인간이 사용할 수있는 방식으로 모델을 공개하는 완전히 일반적인 응용 프로그램 인터페이스를 생각할 수는 있지만 사실 아주 작은 영역을 제외하고는 이러한 소프트웨어를 작성하는 것은 실제로 매우 어렵습니다 (예 : 모든 필드가 한정된 간단한 열거 형에서 선택되는 DB 채우기). 응용 프로그램이 해당 모델에 적합하지 않으면 해당 응용 프로그램에만 해당하는 내용이 있어야합니다.이를 "일반적인"방식으로 수행한다면 일반 클라이언트 응용 프로그램에서 수행해야 할 작업에 대한 복잡한 설명을 다운로드하게되며 해당 설명 자체가 점점 더 프로그래밍 언어와 비슷하게 느껴질 것입니다. 이제 믹스에서 새 도메인 특정 언어 (물론 잘못 설계된 것)를 제외하고는 사각형으로 돌아 왔습니다. 당신은 추격을 줄이고 전체적으로 일반적인 것이 가치가 없다는 것을 받아 들일 수 있습니다.

그러나 노출하는 리소스, 해당 작업에 적용되는 동사 및 사용자 소프트웨어가 해당 리소스를 찾는 방법을 신중하게 생각해서는 안됩니다. REST와 HATEOAS에 이어 많은 도움이 될 것입니다. (또한 응용 프로그램의 기본 추상 모델이 무엇인지에 대해 명확한 생각을 갖고 있다면 자연스럽게 노출시켜야합니다.)

+0

이전에 이러한 유형의 하이퍼 - 일반 앱을 여러 번 보았습니다. 그들은 항상 진정한 프로그래밍 언어였으며, 실제로 아무것도 수행하지 않도록 구성하기가 끔찍했습니다. 아니면 둘다. –

+2

다른 누군가 오늘 오늘 저에게 말했듯이, 브라우저 안에 RIA 브라우저를 구축하는 것과 같습니다 (붉은 깃발!). 도메인 고유 언어에 대한 귀하의 의견은 종종 나 자신에게 생각하기 때문에 신경을 두드 렸습니다 (제 2의 붉은 깃발). 그것은 우리가 만들고있는 것입니다. 그러나 나는 우리의 목적이 아니라는 것을 상기 시켰습니다. 그것은 결국 수단 일뿐입니다. 당신의 대답은 제 생각을 결정 짓는 데 도움이되었습니다. 나는 민첩한 접근 방식으로 돌아가서 즉각적인 요구를 충족시키는 시스템을 구축 할 것입니다 ... 실용적으로 클라이언트/서버 커플 링을 줄이기 위해 HATEOAS로부터 많은 것을 얻으십시오. – HDave

+0

나는 DSL이 맘에 든다.하지만 그들이하는 일에 대해 매우 구체적임을 확신한다. –

3

GWT 앱이 HTTP에 의해 제공된다는 점을 감안할 때, 서버와 밀접하게 결합되면 HATEOAS을 위반하지 않습니다. 그것은 "주문형 코드"입니다.

구글, 트위터, 페이스 북 모두 제 3 자에게 공개 된 것과는 다른 자신의 앱에 특정 API를 사용합니다 (트위터는 최근 자신의 웹 애플리케이션 용 공개 API를 사용하기로했지만 원래는 그렇지 않았습니다). 구글은 공개 API로 G +를 옮길 계획이 없다고 말했다. 제 3자를 훼손하지 않고 실험을하고 변경을 깨울 ​​수 있기 때문이다.