24

現在構築中の WebAPI のクライアント実装を書き始めたところです。API は既に HATEOAS を採用しているので、それに応じてクライアントを作成しています。クライアントのベースとしてRestSharpを使用しています。

クライアントは、構築時に api ベース URL を渡され (" https://myapi/start ")、そこでリクエストを発行し、その後、他の利用可能なリソースの一連の uris を渡します - 承認 ( " https://myapi/ authorize ") を呼び出し、アクセス トークン (" https://myapi/tokens ") を要求して、API 上の保護されたリソースを呼び出すことを承認します。

問題は、返されたハイパーメディアの rel="" 要件について、まだ策定されている標準があるかどうかです。

4

5 に答える 5

16

ハイパーテキスト アプリケーション言語(HAL) はドラフト標準であり、ハイパーメディア間のこれらのリンクを標準化しようとしていると思います。

これは JSON 仕様のドラフトへのリンクですhttps://datatracker.ietf.org/doc/html/draft-kelly-json-hal-03

HAL 仕様は、「href」が Web リンク仕様 (RFC 5988) で定義された「ターゲット IRI」に準拠することを強制します。

ここに C# を使用した HAL の XML 実装がありますhttps://github.com/tavis-software

上記の GitHub リポジトリには、RFC 5988 の .Net 実装の例も含まれています。

于 2012-11-14T14:57:04.553 に答える
11

Web Linking 仕様 RFC5988は、別の回答で指摘されているように、いくつかの異なるタイプのリンク関係を定義しています。しかし、リンク関係レジストリを作成し、さらなるリンク関係登録を許可するように IANA に指示します。公開リンク関係決定的なリストであるレジストリは、 iana.org /assignments/link-relations で入手でき、新しい関係が登録されると更新されます。

HTTP API で一般的に使用される関係には、次のものがあります。

  • start(すべてのリソースから API の開始点に戻るポイント)
  • item(コレクションからアイテムへのポイント。たとえば、Twitter ユーザー ページからツイートへ)
  • collection(の逆item)
  • previous(これらの次の 4 つは、コレクションや複数ページの記事など、ページ付けされたリソース用です)
  • next
  • first
  • last
  • create-form(コレクションから、「新しいアイテム」HTML または XForms フォームなど、新しいコレクション アイテムの作成方法を説明するリソースへのポイント)
  • edit-form(アイテムから、そのアイテムを編集するためのフォーム ([ツイートの編集] ボタンなど) を指します)

目的の関係がそのリストのいずれにも含まれていない場合、関係はURI でなければなりません。さらに、API クライアントが関係のドキュメントを検索できるように、その URI を管理下のドメインで参照解除可能な http URL にすることをお勧めしますhttp://www.example.com/link-relations#tweets。通常、API の開始点はコレクションのリストであり、各コレクションには、各コレクションに含まれるリソースのタイプを説明するカスタム リンク リレーションがあります。

于 2012-12-03T15:18:27.250 に答える
5

この IETF 提案の標準RFC5988 ドキュメントでは、さまざまなタイプのリンク関係と提案された使用法について説明しています。その焦点は HTTP リンク ヘッダーの仕様ですが、他のリンク関係タイプの説明も含まれています。一部の (ほとんどの?) RFC と同様に、これを読むと、開始時よりも混乱する可能性がありますが、長期的には努力する価値があります。あなたの質問の二重引用符の間に何を置くべきか答えますか? おそらくそうではありませんが、少なくとも、選択の指針となるいくつかの考えが得られるでしょう。

于 2012-11-14T14:51:31.433 に答える
2

HALは確かに非常に興味深いようです。

このトピックまたは HATEOAS を調べている他の人にとって、HAL ブラウザーは必須です。以下のリンクでチェックしてください。

Heroku の Hal Browser

于 2012-11-14T15:10:33.237 に答える