2012-02-13 10 views
3

REST APIを使用して作業を行い、関係を表す値だけでなく、その関係のURLも渡してHATEOASに準拠させることができる問題を発見しました。このRESTful JSON応答形式はHATEOASに準拠していますか?

私は適切な解決策を思いついたと思いますが、私にはそれ以上の知識を持っている人からの確認が欲しいと思います。

このRESTful JSONレスポンスは、依然としてHATEOASの原則に準拠していますか?

{ 
    "employee":{ 
     "empId":12345, 
     "fName":"Bubba", 
     "lName":"Gump", 
     "title":"Shrimp", 
     "reportsTo":54321, 
     "hateoas":{ 
      "self":"http://www.bubbagumpshrimp.com/rest/Employees/12345", 
      "reportsTo":"http://www.bubbagumpshrimp.com/rest/Employees/54321", 
      "directReports":"http://www.bubbagumpshrimp.com/rest/Employees/?reportsTo=12345" 
     } 
    } 
} 

あなたはどう思いますか?そのフォーマットは機能しますか?

以下@fumanchuからの提案に基づき

が、これは...

{ 
    "employee":{ 
     "empId":12345, 
     "fName":"Bubba", 
     "lName":"Gump", 
     "title":"Shrimp", 
     "reportsTo":54321, 
     "hateoas":{ 
      "collection":"http://www.bubbagumpshrimp.com/rest/Employees/", 
      "self":"12345", 
      "reportsTo":"54321", 
      "directReports":"12345/DirectReports" 
     } 
    } 
} 

指導のおかげで、私は今のところ使ってみましょう形式です!

+0

よく見える、ブバ。 –

答えて

3

「うまくいく」が冗長です。いったんURIを持っていれば、その意味や使用方法について何も伝えていない裸のIDを保持するのはなぜですか?私はあなたの代わりにこれを試してお勧めします:

{ 
    "employee":{ 
     "self":"http://www.bubbagumpshrimp.com/rest/Employees/12345", 
     "fName":"Bubba", 
     "lName":"Gump", 
     "title":"Shrimp", 
     "reportsTo":"http://www.bubbagumpshrimp.com/rest/Employees/54321", 
     "directReports":"http://www.bubbagumpshrimp.com/rest/Employees/12345/directReports" 
    } 
} 

(「[報告= 12345?」と「directReports」リソースを公開する理由はありませんそれは、その実装するよりも、その意味で、それを識別するために、常に良いでしょう。)

APIおよび/またはメディアの種類を管理している場合(また、JSONで定義されていないためにURIの予想先をクライアントに伝える必要がある場合)、 "reportsTo"と "directReports"の値は "self"を基準としたURIです。

{ 
    "employee":{ 
     "self":"http://www.bubbagumpshrimp.com/rest/Employees/12345", 
     "fName":"Bubba", 
     "lName":"Gump", 
     "title":"Shrimp", 
     "reportsTo":"54321", 
     "directReports":"12345/directReports" 
    } 
} 
+1

これは冗長です:/。私が行ったフォーマットを選んだのは、私のサーバー技術がXMLやJSONのレスポンスへのリソースの変換をどのように処理したかによるものです。 (JAXB POJOでJavaのJAX-RSアノテーションを使用しています)。私が今持っている方法では、Javaのデフォルトの応答作成者と読者が、すべてのHTTP動詞を単一のPOJOで処理できるようになり、コードと複雑さの全体的な行が削減されます。 私はJavaまたはRESTに慣れていない他のプログラマーのためのテンプレートを開発しようとしているので、プログラミングの容易さは本当に重要です。 (理想的ではありませんが、それは企業環境です)。 – hypno7oad

関連する問題