2017-09-25 6 views
0

私はいくつかのリソースの作成と更新を許可するREST APIを持っています。不変のリソースをREST APIに置き換えてください

POST /cars 
POST /cars/:id 

車は、とりわけ、サーバによって作成時に生成されIDフィールドがあります。

これらの車を使用するビジネスプロセスでは、車の「リビジョン」をそれぞれ不変であるとみなし、REST APIを介して車に変更を加えて新しい「改訂版」を作成できるようにしたいと考えています。これらのリビジョンはタイムライン上にあり、変更がいつ行われるかに応じて、ビジネスプロセスはそれを使用するかどうかを決定します。

私はこれに関するいくつかの考え方とそれをどうやって行くのか聞いてみたいと思います。

もちろん、ちょっとハッキリな解決策は、車を不変に保つことです。IDは、言い換えると "改訂"ハンドルです。更新により、異なるIDを持つ新しい車が得られ​​ます。もちろん、IDを持つAPIを呼び出して別のIDを返すのはやや奇妙です。

意見や提案はありますか?ありがとう! StackExchangeは、質問と回答全体でリビジョンのものを使用する方法の改正を検討する提案を見て、後に、私は事実上のオブジェクトが持っているという点でcarsrevisionsに対処する方法を疑問に思う

UPDATE

OK、フィールドと方法を見つける方法IDで特定される特定の自動車の最新バージョン。例えば

、車があります

car: 
    id: 1 
    brand: Toyota 
    model: Yaris 
    price: 1000 

のは、例えば、価格が時間とともに変化することができ、これは車の改正によって捕獲されなければならないとしましょう:

revision: 
    car_id: 1 
    revision: 1 
    price: 900 

はのは、私を言ってみましょう最新の車をID 1で手に入れたいのですが、トヨタヤリスに1000の代わりに900を支払う必要があります。データベースの期待値、つまり2行と最新のリビジョン(見つかった場合)が他のものを上書きします?これはどのように作動しますか?

アップデート2

OK、そう改訂は単に歴史を追跡することで、最新の情報はcarsエントリ自体です。私。更新が行われると、車のエントリを更新するだけでなく、以前の値で新しいリビジョンが作成されます。どちらもトランザクションで行われます。

答えて

1

Stack Exchange APIと同じように扱わないのはなぜですか?

GET /posts/{ids}/revisions 

エンドポイントは、ちょうどリビジョンを取得するためにもあります:

GET /revisions/{ids} 

は、ドキュメント:


など/revisions/1/revisions/2など静的マッピングのほかに、あなたのAPIは、このような/revisions/current/revisions/latestとして、現在/最新のリビジョンを指すURIを提供することができます。

リソースには、mapping whose value changes over timeを含めることができ、現在の/最新のリビジョンの識別子の場合があります。

+0

プロセスの説明や、最新の質問と回答をどのように表示して、どのように表示すると、このページ? – murrekatt

+0

@murrekatt便宜上、あなたのAPIは最新のリビジョン:/ cars/{ids}/revisions/latest'を指すURIを提供することができます。 –

+0

はい、最新のものを返すべきですが、最新のものは "改訂版"でありポストではなく、どうやって一緒に結びつけられているのかが不思議です。あなたは知っていますか? – murrekatt

関連する問題