2016-11-13 5 views
0

最近、私はRESTfulなAPIを設計しました。ヘッダーフィールドをLinkにしてHATEOASを実装したいと思います。HTTPヘッダーフィールドにCURIEを定義する標準的な方法はありますか?

これは問題なく動作しますが、APIのクライアントにとってより使いやすくしたいと考えています。例えば

Linkヘッダーは次のようになります。この場合

Link: <https://api.domain.com/orders/{id}>; rel="https://docs.domain.com/order"

は、クライアントがrel属性でhttps://docs.domain.com/order値を検索することによってリンクを見つける必要があります。

これはうまくいきますが、ドキュメントのURIが壊れやすく、長さがあるため、検索するキーとしては少し実用的ではありません。

だから私はそれの代わりにこのようなものにするためにCURIEを試してみて、使いたい:URIの変更の問題は大部分が緩和され、それははるかにコンパクトですされている方法

Link: <https://api.domain.com/orders/{id}>; rel="[rc:order]"

クライアントによる検索が容易になります。

私はLinkヘッダーフィールドを使用してHATEOASを実装しているので、レスポンス本文にメタデータを導入するのではなく、HTTPヘッダーフィールドとしてCURIEを含めることが最も一貫していると感じています。

API全体が標準のHTTPヘッダーフィールドとステータスコードをすべてのメタデータ(ページ番号、バージョン管理など)に使用するため、CURIEを定義するためにメタデータをレスポンス本体に導入しないでください。

しかし、HTTPヘッダーフィールドを使用する場合は、どのフィールドをCURIに使用する必要がありますか?

HTTPヘッダーフィールドでこれを行う標準的な方法はありますか?

そうでなければ、私はちょうどX-Curie: <https://docs.domain.com>; name="rc"のようなカスタムヘッダーフィールドを使用して、それをクライアントのためにどこかに書かなければなりませんか?

ほとんどのリソースはXMLまたはHAL標準を参照しているため、HTTPヘッダーフィールドに関するこれに関する情報は高く評価されます。

答えて

0

いいえ、できません。リンク関係は文字列です。

あなたが最初の場所で不安定なリンク関係名を使用している理由である自分自身に尋ねるべき質問は...

+0

これが、RFCに必要なWebリンクです。それは述べている: "関係タイプを登録したくないアプリケーションは、関係タイプを一意に識別するURI [RFC3986]である拡張関係タイプを使用することができる"とそれは言う: "拡張関係タイプが比較されるとき、文字列(Curie [W3C.CR-curie-20090116])のような別の形式でシリアル化されている場合はURIに変換した後に比較されます。 URIが必要でCURIEが許可されているので、私はCURIEを定義する標準的な方法があるかどうか疑問に思いました。 URIが間違いなく不安定であることを意味するわけではありませんが、CURIEが優れています。 –

+0

少なくともそれはとにかくRFCの私の理解です。もちろん、私はCURIEを使用する必要はありません。HTTPヘッダーフィールドにCURIEを定義する標準的な方法があれば、クライアントにとってはより良いものになるはずです。 –

+0

@ JakeLucas - あなたはその部分を誤解しています。 HTTPヘッダーフィールド以外の形式で表示されるリンク関係についてです。 –

0

あなたがLinkヘッダーを使用しない場合でも、キュリーが問題にあなたが解決しないだろうプレゼント。 CURIEの標準では、短縮されたURIは、比較が実行される前に「展開されていない」必要があるためです。これはまた、問題のリンク関係を比較するためにも適用される。

具体的なアプローチは、自分のURIをfoo:orderのようにコインすることです。次に、問題の関係のドキュメンテーションURLを解決するカスタムURL短縮メソッドを使用することができます。このメソッドは、HAL+JSONなどのハイパーメディア形式で使用されます(HAL形式の使用は実際には誤解を招くため、URLのドキュメントを解決する方法としてのみ使用してください)。

0

すべてのrelプロパティは単純な文字列一致と等しいため、HTTP以外のものはURIとして扱われないため、HTTPのLinkヘッダのrelのプロパティは展開されません。

私の主な関心事は「ドキュメントのURIが壊れやすいため、変更できないURIを選択する」ということです。ドキュメント内のある場所にリダイレクトするURLを使用しても、クライアント開発者が解決できるようにするには、リンク関係で選択したURIを永続的にする必要があります。

関連する問題