13

私は現在RESTサービスに取り組んでいます。このサービスには、ウィキペディアの記事と同様に、さまざまなバージョンのエンティティがあります。

今、私は何のために戻るべきか疑問に思っています

GET /article/4711

現在のバージョンへの(一時的な)リダイレクトを使用する必要がありますか?

GET /article/4711/version/7

または、現在のバージョンを直接返す必要がありますか?リダイレクトを使用すると、HTTPキャッシングが大幅に簡素化されます(Last-Modifiedを使用)が、リダイレクトには欠点があります(余分な要求、実装が「難しい」)。したがって、これが良い習慣かどうかはわかりません。

共有する提案、アドバイス、または経験はありますか?

(ところで、「RESTバージョン」を検索しようとしたことがありますか?取得するものはすべて、エンティティではなくAPIのバージョンに関するものです。したがって、これが重複している場合はご容赦ください。)

4

5 に答える 5

11

バージョンをエンティティとして扱う場合(その外観からすると)、これが私が提案することです。

GET /article/4711

すべてのバージョン(およびそれらへのリンク)のリストを返します。これにより/article/4711、コンテナエンティティが作成されます。

GET /article/4711/latest

最新バージョンの内容を返します。以下に沿って検討/version/latestすることをお勧めします。

GET /article/4711/version/7

記事の特定のバージョンを返します。

于 2010-04-02T16:47:04.560 に答える
2

の意図した動作によって異なりますGET /article/4711。常に最新バージョンを指すように意図されている場合は、最新バージョンを直接返す必要があります。特定のバージョンにリダイレクトすることは、将来その特定のURLにアクセスしないようにユーザー/クライアントライブラリに依存しているため、問題があるように思われます。HTML用語に変換するために、ユーザーはversion/7URLをブックマークして、アドレスバーに最初に入力した最新バージョンではなく古いバージョンにアクセスしていることに驚かれる可能性があります。

于 2010-04-02T16:42:59.373 に答える
2

https://datatracker.ietf.org/doc/html/draft-brown-versioning-link-relationsを確認することをお勧めします。

CMISリンク関係とHTTPリンクヘッダーを使用して、/ article / 4711を最新にし、バージョンへのリンクを提供できます。例:リンク:</ article / 4711 / versions>; rel = version-history

于 2010-04-02T19:53:19.693 に答える
2

記事のバージョンとハイパーテキスト

インターフェイスをRESTfulにすることに本当に関心がある場合は、HATEOSスタイルでこれを行う方法を検討する必要があります。

私の意見では、それは、ユーザーがエンティティのリビジョンのリストをナビゲートできるように十分な情報を返すことを意味します。ロイからこれを読んだら...

「インターフェイスを検出する必要はありません。ハイパーテキストで定義されています。この表現は、次のアプリケーション状態へのすべての遷移を構成する方法をクライアントに指示します。」

...あなたはあなたがどのようにあなたGET /article/4711が十分な情報を返すべきかについての感覚を得るでしょう

  1. 記事の最新バージョンを入手する

  2. 次/前のバージョンを入手

モデルに最適なものはわかりますが、ポインタとしてタグの使用を検討できます

  <link rel="older"
        type="text/html"
        href="http://www.yourdomain.com/article/4711?version=6"/>

..。

于 2010-04-06T14:25:10.750 に答える
1

次のリビジョンのリストを返す方が安らかなと思います。

GET /article/4711

あなたも持つことができます:

GET /article/4711/current

現在のバージョンを直接返します。

于 2010-04-02T16:40:55.367 に答える