問題タブ [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.
symfony - JMSSerializerBundle を使用して適切なハイパーメディア形式を作成するには?
次のような XML 応答を作成したいとします。
次のようなドメイン モデルがあるとします。
そして、次のようなマネークラス:
さて、私の質問に。次のような応答を作成するのは非常に簡単です。
アノテーション、XML または YAML のいずれかを使用して、JMSSerializerBundle に製品オブジェクトをシリアライズする方法を指示します。ただし、xmlns:atom
および<atom:link>
エントリはエンティティによって指定されるべきではありません。これは、それがどのように、どこに配置されているかという概念を持たないためです。rel
など、さまざまな属性を持つリンクをさらに想像することもできますedit
。
頭に浮かぶ 1 つの解決策は、特定のオブジェクトのシリアル化イベントをリッスンし、これらの属性とタグを適切に追加するサービスです。サービスは DI を使用してRequest
、Router
サービスなどを取得し、要求された形式に適した形式でこれらのリンクを生成できます。XML 応答の IE では、適切なタイプを次のように設定できます。application/media-format+xml
、一方、json-response では、次のようなものを生成できます
現在、JMSSerializerBundle のドキュメントで@PreSerialize
、 、 、およびの注釈を見つけまし@PostSerialize
たが、シリアル化されているオブジェクトのメソッドしか呼び出せないようです。
これが達成できるかどうか/方法を知っている人はいますか? それとも、Twig などのテンプレート エンジンを使用して手動で XML 応答を作成する必要がありますか?
ruby-on-rails - Grape(またはSinatra)を使用したハイパーメディア駆動型APIの実装
Rackの上に直接マウントされたGrapeを使用して、ハイパーメディア駆動型APIを実装しようとしています。Grapeは、関連するすべてのハイパーメディアを提供するための適切な場所であると思われるプレゼンター(「エンティティ」)をサポートします。
Railsルーターを利用できる場合は、その耳でルートを選択し、それをプレゼンターロジックに投げ込むことができます。例(ROARアプローチ):
ただし、Grape自体には、に類似した名前やエイリアスがないため、ルートに簡単にアクセスすることはできませんarticle_url
。
グレープやシナトラで同様の問題に遭遇した人はいますか?リソースリンクを公開するためのクリーンでシンプルな方法はありますか?
servicestack - ServiceStackカスタムフォーマットとベンダー固有のコンテンツタイプ
HAL(ハイパーテキストアプリケーション言語)のカスタム形式を追加しようとしています。カスタムフォーマットハンドラーを作成し、ServiceStack v-cardの例に従って、すべてが正常に機能しており、ServiceStackに登録できました。
問題は、カスタム形式で「hal+json」のコンテンツタイプを指定しようとしていることです。
サービスにGETリクエストを送信し、次のように形式を指定する場合:
'http:// mylocalserver:555555 / items?format = hal + json'
ServiceStackは、デフォルトでJsonのみを使用するようになっています。コンテンツタイプを「halj」のような別のものに変更してみました。ServiceStackは、カスタムフォーマッターを使用して「?format=halj」を使用するリクエストをフォーマットします。
ServiceStackのソースをプルダウンしたところ、そこに含まれるリクエストはクエリ文字列でフォーマットをチェックし、フォーマットに「json」が含まれている場合は、デフォルトでJsonフォーマッターになります。
これを回避する方法はありますか?私はこの振る舞いを無効にする方法についていくつかのドキュメントを見つけようとしてきました。
javascript - AngularJS の $resource とハイパーメディア
次のように定義された AngularJS $resource があります。
そしてRESTful API。したがって、GET
onを実行すると、次のMenus
ように返されます。
質問は、メニュー 2 を削除するにはどうすればよいですか? (独自のハイパーメディア リンクがある場合: http://cafe.com/api/menus/2
)
json - フォームとリンクを含む JSON ハイパーメディア API
私は REST API の計画の初期段階にあり、REST の HATEOAS 制約に準拠したいと考えています。しかし、JSON 形式も提供したいと思います。したがって、私の質問は、JSON でリンクとフォームを表すための規則があるかどうかです。
リンクの例を見つけましたが、これはリンクを表すかなり一般的な方法のようです。
一方、フォームを表現することは、私があまり見たことがありません。おそらく誰かが座って、これらの線に沿って何かを考え出したのではないかと考えていましたが、すべての警告を考慮しました。
これのインスピレーションは、Jon Moore が JSON はハイパーメディア API の適切な形式ではないことを示唆しているこのビデオを見ることから来ています。
http://oredev.org/2010/sessions/hypermedia-apis
ところで、本当に良い話です!
すべてのご意見をお待ちしております。
rest - ハイパーメディアAPIの自己リンクの重要性は何ですか?
私がRESTで読んだすべての記事と本は、ハイパーメディア応答に「自己」relリンクを追加することの重要性を繰り返していますが、それらはすべて理由と使用例に光を当てています。
なぜセルフリンクを追加する必要があり、それはどのように役立ちますか?
java - How to retrieve entity relationships after save?
I'm developing a RESTful webservice with spring-data as its data access layer, backed by JPA/Hibernate.
It is very common to have relationships between domain entities. For example, imagine an entity Product
which has a Category
entity.
Now, when the client POST
s a Product
representation to a JAX-RS method. That method is annotated with @Transactional
to wrap every repository operation in a transaction. Of course, the client only sends the id
of an already existing Category
, not the whole representation, just a reference (the foreign key).
In that method, if I do this:
the variable entity
now has a Category
with only the id
field set. This didn't surprise me. I wasn't expecting a save (SQL insert) to retrieve information on related objects. But I need the whole Product
object and related entities to be able to return to the user.
Then I did this:
that is, retrieve the object after persisting it, within the same transaction/session.
To my surprise, the variable entity
didn't change anything. Actually, the database didn't even get a single select query.
This is related with Hibernate's cache. For some reason, when in the same transaction, a find does not retrieve the whole object graph if that object was previously persisted.
With Hibernate, the solution appears to be to use session.refresh(entity)
(see this and this). Makes sense.
But how can I achieve this with spring data?
I would like to avoid to create repetitive custom repositories. I think that this functionality should be a part of spring data itslef (Some people already reported this in spring data's forum: thread1, thread2).
rest - RESTful Web サービス用のカスタム メディア タイプ (アプリケーション/vnd) を作成する方法は?
私は今RESTで遊んでいて、すべての概念を正しくするためにHATEOASを適切に実装していると思いました。
application/vnd[...]+xml
そのために、独自のメディア タイプ (および)を作成したいと考えていますapplication/vnd[...]+json
。
最初の質問:メディア タイプは、サーバーとクライアント間の契約を定義しますか?
メディア タイプによってメッセージ形式が定義されるため、新しいメディア タイプに合わせて XML スキーマと JSON スキーマを追加する必要があります (これにより、REST クライアントはメッセージに何が入ってきて、何を送り返すかを知ることができます)。
私はウェブでいくつかの調査を行いましたが、これを行う方法の詳細が欠落しています。網羅的な仕様/ドキュメントを作成するだけですか、それとも実装するための技術的な手順がいくつかありますか? (IANAに登録しなくてもいいですよね?)
完全に機能する新しいapplication/vnd
メディア タイプを作成するにはどうすればよいですか? また、クライアントが適切に使用できるようにするには、何に注意する必要がありますか?
java - Jersey がネストされたリソースでの宣言型ハイパーリンクをサポートしていないというのは正しいですか?
Wonkle 型の JSON 表現には、適切な値を持つ url 属性があります。ただし、Wonkle が Widget 型のネストされた属性として使用される場合、その url 属性は null 値を持ちます。
私は何か間違ったことをしていますか、それともこれは LinkFilter が機能する方法ですか?
ありがとう!
rest - ハイパーメディア リンクを使用する場合、なぜカスタム メディア タイプが必要なのですか?
私は現在、純粋にリソース指向のエンタープライズ サービスを設計しています。いくつかのブログや本などを読んだ後、ハイパーメディア リンクを使用した REST が最適だと思います。
ただし、これらすべてのブログや書籍で言われていることの 1 つは、応答でハイパーメディア リンクを使用する場合、メディア タイプとして application/xml を使用しないことです。次のような一般的なステートメントを除いて、誰も理由を述べていません-リンク関係タイプのないプレーンなURIは、URIのセマンティクスをクライアントに伝えません。
私が理解したことから、独自のカスタム メディア タイプを定義し、それを読み取る方法をクライアントに認識させることが推奨されるアプローチです。しかし、私のサービスに接続するクライアントが決してブラウザーではないことがわかっている場合、それは問題になるでしょうか? application/xml タイプの応答でこれらのリンクを公開することはできませんか?
ここの誰かがこれについてもっと詳しく説明してくれることを願っていました。