2

現在、REST API を設計しており、撤回アクションに取り組む最善の方法がわからないため、投稿の目的のために、これは既に処理されているため、セキュリティを無視します。

現在、ユーザーリソースにはバランス接続があり、

GET https://api.example.com/user/1/balance

{"balance":10}

ユーザーの残高を返します。

この残高から引き出すには 2 つの方法が考えられます。残高接続で削除するか、新しい接続で引き出してから、この接続に金額を POST します

DELETE実装 - 5ポイントを撤回

DELETE https://api.example.com/user/1/balance?amount=5

{"balance":5}

POST実装 - 5 ポイントを引き出す

POST https://api.example.com/user/1/withdraw
HTTP BODY: amount=5

{"balance":5}

提案?

個人的には、データからアクションを分離するため withdraw 接続で POST を使用ます。これにより、トランザクションをGETで取得し、 DELETEでキャンセルできます。

アップデート

もう 1 つの方法は、残高オブジェクトでトランザクション接続を作成してから、これにPOSTすることです。

POST https://api.example.com/user/1/balance/transactions
HTTP BODY: amount=-5

{"balance":5}

これはより良い方法でしょうか?これにより、残高リソースにトランザクションリソースが作成されます。

4

1 に答える 1

4

DELETE オプションは適切な選択ではありません。なぜなら、http セマンティクスによれば、リソースの連続した DELETE 要求が受け入れられるとは思わないからです。つまり、リソースは 1 回だけ削除できると考えているということです。

引き出し操作は非冪等であることを考慮してください。つまり、同じリソースに対する複数のリクエストが異なるレスポンスを返す可能性があることを意味します。これは、リクエストがリソースのステータス (残高) を変更する可能性があるためです。

このタイプの非べき等操作では、通常、次のような POST メソッドを使用します。

Request:

POST https://api.example.com/user/1/balance/transactions
HTTP BODY: {type:withdraw, amount:5}

Response:

200 OK {"balance":"5"}
401 Unauthorized {"message":"insufficient funds"}

役立つこのリソースをご覧ください。

http://www.restapitutorial.com/lessons/httpmethods.html

于 2013-02-14T17:34:44.923 に答える