2016-11-29 3 views
1

私は、テストとテスト実行のメタデータ用にRESTfulなAPIを設計しています。私は2つのリソース、TestTestRunを持っています。フードの下では、データベースに1対1の関係があります。POST要求を別の(関連する)リソースに送信してリソースを作成/変更する

まず、POSTapi/v1/testに送信してTestリソースを作成します。

次に、このテストを開始する必要があります。私はPOSTapi/v1/test/{id}/runに送信することで、これはTestリソースに関連するTestRunリソースを作成します。

そしてIは、対応するTestRunリソース(finish_timeresult等のような、いくつかのフィールドを設定)を修正する、api/v1/test/{id}/finishPOSTを送信することによって、試験を停止することができます。

APIのユーザーはリソースへのアクセスは決してGETになりません。また、関連するTestリソースを介してアクセスするだけです。

このデザインはAPIユーザーにとっては非常に簡単ですが、これは開発者にとっても簡単なことではありません。このデザインは私が十分に上がったか? RESTの原則やベストプラクティスに違反していますか?私はこれに関するどんな情報も感謝します。

全体APIの拡張された設計記述:https://gist.github.com/Ch00k/27724e29ec1bf044ebbfdabef9e842d5

+0

「これは開発者にとってもまったく間違いありません。何が問題なの? –

+0

@Lutz Hornそれは明らかに間違った質問だった:)私はそれが良い方法であるかどうか、そしてそれがRESTのベストプラクティスに反していないかどうか、私はちょうど思っていた。 –

答えて

0

あなたのAPIがそうtestrunはRESTリソースではないように思わ、testrunへのアクセスを許可しません。実際、あなたのURLはテストに関する限りRESTとRPCの組み合わせであり、特に/run/finishのパスです。

RPCはRESTではないので、私はこの少し手直しします:api/v1/test/{id}

  • 利用資源のだけタイプ、テストを、。
    • status
    • 試験を用いてretrievd可能な状態GET要求api/v1/test/{id}に有するstoppedstartedfinished、...
    • finish_time
    • result
    • を...
  • テストの状態が変更されます。 PATCHリクエストをapi/v1/test/{id}に送り、テストを開始するために新しい状態:{"status": "started"}を含むJSON本体でこれを呼び出します。これはRPC呼び出しを置き換えます。
+0

既存のデータベース設計も保持しますか?私。私はまだTestテーブルとTestRunテーブルを持ち、api/v1/test/{id}へのPATCHリクエストを発行すると、TestRunテーブルのレコードが変更されます。 私の設計では、テスト自体は状態を持っていませんが、状態はTestRunのstart_timeとend_timeによって定義されています。 –

+0

ステータスフィールドを実際に追加します。なぜなら、より簡単にクエリを実行できるからです。 –

+1

RESTはリソースを永続化することとは関係ありません。リソースは、複数のテーブルに格納することができます。 –

関連する問題