160

私は REST について基本的なことを理解していることを覚えておいてください。次の URL があるとします。

http://api.animals.com/v1/dogs/1/

そして今、私はサーバーに犬の鳴き声をさせたいと思っています。これを行う方法を知っているのはサーバーだけです。残りの永遠に犬を10分ごとに吠えるCRONジョブで実行したいとしましょう。その電話はどのように見えますか?私はちょっとこれをしたい:

URL リクエスト:

ACTION http://api.animals.com/v1/dogs/1/

リクエスト本文:

{"action":"bark"}

独自の HTTP メソッドを作成したことに腹を立てる前に、RESTful な方法でサーバー側メソッドを呼び出す方法について、より良いアイデアを提供してください。:)

明確化のために編集

「樹皮」メソッドが何をするかについて、もう少し明確にします。異なる構造の API 呼び出しになる可能性があるいくつかのオプションを次に示します。

  1. bark は dog.email にメールを送信するだけで、何も記録しません。
  2. bark はメールを dog.email に送信し、dog.barkCount を 1 ずつ増やします。
  3. bark は、bark が発生したときの bark.timestamp 記録を含む新しい「bark」レコードを作成します。また、dog.barkCount を 1 増やします。
  4. bark は、システム コマンドを実行して、最新バージョンのドッグ コードを Github から取得します。次に、dog.owner にテキスト メッセージを送信して、新しいドッグ コードが運用中であることを伝えます。
4

8 に答える 8

4

ほとんどの人は、この目的でPOSTを使用します。「他のHTTPメソッドが適切でないと思われる場合に、安全でないまたはべき等でない操作」を実行するのに適しています。

XMLRPCなどの API は、POSTを使用して、任意のコードを実行できるアクションをトリガーします。「アクション」は POST データに含まれています。

POST /RPC2 HTTP/1.0
User-Agent: Frontier/5.1.2 (WinNT)
Host: betty.userland.com
Content-Type: text/xml
Content-length: 181

<?xml version="1.0"?>
<methodCall>
   <methodName>examples.getStateName</methodName>
   <params>
      <param>
         <value><i4>41</i4></value>
         </param>
      </params>
   </methodCall>

RPC の例は、POST がサーバー側メソッドの HTTP 動詞の従来の選択であることを示すために示されています。POST に関する Roy Fieldingの考えは次のとおりです。彼は、指定された HTTP メソッドを使用することは RESTful であるとほとんど述べています。

RPC 自体はリソース指向ではないため、あまり RESTful ではないことに注意してください。しかし、ステートレス、キャッシング、またはレイヤー化が必要な場合、適切な変換を行うことは難しくありません。例については、 http://blog.perfectapi.com/2012/opinionated-rpc-apis-vs-restful-apis/を参照してください。

于 2013-06-01T22:45:26.063 に答える
2

POSTのために設計されたHTTP メソッドです。

データのブロックを提供する...データ処理プロセスに

CRUD マップされていないアクションを処理するサーバー側メソッドは、Roy Fieldingが REST で意図したものですPOSTPOST情報を処理するためのサーバー側メソッドへのデータの投稿のほとんどを処理します。

とはいえ、犬の鳴き声のシナリオで、サーバー側の鳴き声を 10 分ごとに実行したいが、何らかの理由でトリガーをクライアントから発信する必要がある場合PUTは、冪等性のため、目的により適しています。厳密には、このシナリオでは、複数の POST リクエストが原因で犬がニャーと鳴る明らかなリスクはありませんが、とにかく、それが 2 つの同様のメソッドの目的です。同様のSOの質問に対する私の答えは、あなたにとって役立つかもしれません。

于 2013-06-04T17:53:35.887 に答える
1

Barking が消費者が行動できる内部/従属/サブリソースであると仮定すると、次のように言えます。

POST http://api.animals.com/v1/dogs/1/bark

犬番号 1 の鳴き声

GET http://api.animals.com/v1/dogs/1/bark

最後の樹皮のタイムスタンプを返します

DELETE http://api.animals.com/v1/dogs/1/bark

適用されません!だから無視してください。

于 2013-06-05T12:52:57.013 に答える
-1

REST はリソース指向の標準であり、RPC のようなアクション駆動型ではありません。

サーバーを吠えさせたい場合は、 JSON-RPCや websockets 通信などのさまざまなアイデアを検討する必要があります。

私の意見では、RESTful を維持しようとするたびに失敗します。パラメーターを使用POSTして a を発行できactionます。新しいリソースを作成するわけではありませんが、副作用がある可能性があるため、より安全です。

于 2013-06-01T22:49:50.040 に答える