問題タブ [hypermedia]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
rest - REST と HATEOAS: 属性のリンク
私は現在、API 応答に関連リソースへのリンクを含めることで、HATEOAS を少し実行しようとする API に取り組んでいます。
いくつかの場所で、記事の画像などにリンクを (ab?) 使用しました。たとえば、記事のリソースは次のようになります。
ご覧のとおり、記事の画像へのリンクをlinks
ハッシュに追加しました。これは URL なので、おそらくそこに移動するはずです。ただし、記事の画像は記事の属性であると主張することもできます。
では、私の質問: URL がハイパーメディア リンクか属性かを判断する方法について、REST コミュニティで合意されたガイドラインはありますか? どちらのアプローチの利点/欠点は何ですか?
rest - REST サービスの開始点リソースを特定する
迷路ゲーム用の ASP.Net Web API サービスを作成しています。
- ユーザーは、迷路内のすべてのセルの詳細を取得して、迷路を 2D 平面で視覚化する必要があります。get メソッドを使用してこれを達成しています
public List<Cell> Get()
- ユーザーは、入力として CellID を指定して、セルの詳細を取得する必要があります。get メソッドを使用してこれを達成しています
public CellRepresentation Get(string id)
。CellRepresentation は、 WebApi.Halを使用してハイパーメディア リンクを返すために使用されることに注意してください。これらのリンクは、上下左右などの可能な動きのターゲット セルを表します。
ここで、ゲームを開始するユーザーにどのセルが開始点であるかを伝える方法が必要です。[次の迷路では、セル「10」が開始点です]。このメッセージを送信するための REST ベースの方法は何ですか?
コントローラ
HAL関連クラス
ビジネスクラス
迷路
angularjs - AngularJS with Hypermedia (HATEOAS): 状態間でハイパーメディア URL を使用する方法
HypermediaでREST APIを使用するui ルーターを備えたAngularJSアプリケーションがあります。一般的な考え方は、API にさまざまな呼び出しの URL を生成させ、クライアントが URL 自体を作成しないようにすることです。
たとえば、製品のリストを取得する場合、API は次のように返します。
問題は、製品の詳細に移動したいということです。コレクションのハイパーメディアから API の URL を入手できます。ただし、状態を変更すると、詳細状態のコントローラーが製品をフェッチできるように、この URL を詳細状態に渡す必要があります。
UI URL は API URL から完全に切り離されています。つまり、クライアントには独自の URL スキームがあります。
クライアントをステートレスに保ち、各ページをブックマーク可能に保ちながら、これを達成する最良の方法は何ですか?
ui router
1 つの解決策は、のdata
プロパティで URL を渡すことです。ただし、ページはブックマーク可能ではありません。もう 1 つの方法は、UI url で API url を渡すことです。これにより、(API url が変更されない限り) ページをブックマーク可能に保つことができますが、UI url は非常に見苦しくなります。
他の考えはありますか?
私がこれについて非常に間違っていない限り、私はテンプレート化されたソリューション、つまり API がクライアントによってパラメーターを挿入する必要がある URL のテンプレートを返すソリューションを探していません。要点は、一部の URL は上記の例よりもかなり複雑であるため、URL には既にデータが取り込まれているということです。
rest - HATEOASハイパーメディアのランタイム発見?
HATEOAS は、その時点でアプリケーション内で実行できるすべてのアクションを応答 (HAL、JSON-LD など) として送信することで、アプリケーションの状態を表すことを理解しています。
たとえば、銀行の口座リソースを表示すると、口座の入金、引き出し、または閉鎖が可能になる場合があります (OPTIONS は UPDATE および DELETE 動詞を返す場合があります)。
これらのリンクを (消費するクライアントが) 実行時に検出できるという点では、どうすればよいでしょうか?
これらのリンクを送信する目的が、クライアントをサーバーから分離し、応答のハイパーメディアによって状態を駆動することである場合、開発者は、応答が意味をなすためにアプリケーションにハードコーディングする必要がある量の知識が必要です。戻ってきた。
OPTIONS リクエストを送信することが、リソースの現在の状態と次にできることを判断する方法であることは理解していますが、使用する実際の URI を見つけるために、これらは単純に COOL URI としてハードコーディングされますか?
ruby-on-rails - active_model_serializers を使用した条件付きリンク
Rails でハイパーメディア API を作成しようとしています。json_api アダプターを使用して、active_model_serializers でペイロードをシリアライズしたいと考えています。しかし、条件付きでリンクをシリアライズするのは簡単ではないようです。
ユーザーが他のユーザーをフォローできるブログアプリケーションのようなものです。したがって、User リソースをシリアル化するとき、たとえば UserA の場合、current_user が UserA をフォローしていない場合は rel :follow とのリンクが必要であり、current_user が既に UserA をフォローしている場合は rel :unfollow とのリンクが必要です。ハイパーメディア API を作成する場合、これは非常に些細な使用例のように思えます。active_model_serializers でこれを行う良い方法があるかどうかは誰にもわかりませんか?
私は現在、次のようなものを書いています(そして、すべてのシリアライザーに含めています):
それは機能します。しかし、それは気分が悪いだけです。そして、active_model_serializers への将来の変更が私にとって問題になったとしても、私は驚かないでしょう。
rest - HATEOAS とリンク/アクション
APIにHATEOASを実装する方法(および実装する場合)に頭を悩ませようとしています。現在の状況に適したアクションのみをクライアントに提供するというコンセプトの 1 つが気に入っています。ただし、このアイデアを正しく実装しているかどうかはわかりません。
ステータスが変更可能なリソース タイプの注文があるとします。ステータスはさまざまです (処理中、承認済み、拒否済み、期限切れ、成功)。次に、次のjsonオブジェクトを作成する必要があります:
それとも、ここで不要なアクションを作成していますか? 上記が正しい場合、PATCH または GET によってステータスを変更する必要がありますか? そして、それがパッチだったら、どうやって (ハイパーメディアの目的を破って) 知ることができるでしょうか?
編集:注文IDを追加するのを忘れました
c# - C#webapiでハイパーメディアを作成する適切なアプローチ
特定のリソースにハイパーメディアを実装する方法についていくつかの調査を行っていますが、実際の実装例を見つけることができず、抽象化だけです...
ご存知のように、さまざまな記事で、男は次のようなメソッドを作成しています。
私がこれまでに持っているもの:
Appointment クラス:
そのための適切な方法はありますか?つまり、リンクをハードコーディングせずに?特定のタイプ、つまり Appointment クラスに対してそれらを動的に作成する方法は?
C# MVC ではなく、C# Webapi を使用しています。
asp.net-web-api2 - ASP.NET Web API 2 OData v4 応答に selfLink と navigationLink を含める方法は?
次のように、JSON 応答に selfLink と navigationLink(s) を含めたいと思います。
次のようなメソッドの存在に気付きました。
- builder.EntitySet("エンティティ").HasFeedSelfLink(...)
- LinkGenerationHelpers.GenerateSelfLink(..)
しかし、私はそれらをどのように使用するか、またはこれを使用する必要があるかどうかさえわかりませんか?
更新: HTTP ヘッダーにAccept: application/json;odata.metadata=full を追加できることがわかりました。これにより、@odata.navigationLink、@odata.id (selfLink の意味)、およびその他の @odata メタデータが大量に提供されます。ただし、これにより、2つの新しい質問が発生します。
- デフォルトを odata-metadata=full serverside に変更することは可能ですか?
- これらの @odata メタデータの一部のみを出力し、可能であれば一部の名前を変更できるカスタム メタデータ形式を追加することはできますか?