2012-01-10 5 views
1

私はDelicious APIを見て、以下を参照してくださいよ、新しいブックマークを作成するための操作です:DeliciousはPOSTの代わりにGETリクエストを使用しますが、なぜ同じことをしてはいけないのですか?

https://api.del.icio.us/v1/posts/add?&url={URL}&description={description} 

彼らは私が「サーバ側のデータベースエントリを作成するために、GETリクエストを使用しているように見えます他のところで読むのはGETリクエストでは行えず、POSTリクエストでのみ行うべきです。

私は自分のAPIを今作成していますが、ユーザーがURLから直接APIを操作できるようにするのはすばらしいことだと思います。しかし、GETでCRUD操作を許可しない限り、これを行うことはできません。

だから、Deliciousは本当にGETでCRUD操作を行っていますか?私のAPIで同じことをしてはならない重要な理由はあるのですか?またはPOSTは偶発的な呼び出しを防ぐためCRUDのために義務づけられていますか?

答えて

1

偶発的な呼び出しもその一部です。これは、HTTP仕様が "冪等の"メソッドについて語ったときの意味です。しかし、Deliciousが何をしているかは、あなたが何回取得しても一度だけURLが追加される限り、実際は冪等であると主張することができます。しかし、もっと重要なのはそのGETがsafeです:

インタフェース設計の観点から、
The important distinction here is that the user 
did not request the side-effects, so therefore 
cannot be held accountable for them. 

は、あなたがをするよう、ユーザーエージェントは、少なくとも明らかに異なるPOST作り、PUTとGETよりも多くの困難、DELETE、またはしたいユーザーリソースの状態が変更される可能性がある場合は、がその変更の原因となるであるため、その差異にヒントを当てることができます。偶数偶数であっても、GETを使って変更を加えると、特にprefetchersが広く配備されている場合には、その責任の行がぼやけます。

+0

これは、1)DeliciousはHTTPのGETとPOSTのための適切なプロトコルに厳密に従っているわけではありませんが、例えば、注文を出すものほど重要ではないこと、 2)GETよりもPO​​STを難しくするためにAPIを構築する必要があります。 –

1

これは、RESTの原則に従ってGETを変更することは禁じられているかどうかによって異なります。したがって、ほとんどの人はRESTを使ってPOSTを変更すると言います。

ただし、GETとPOSTには違いがあります。 RFC GET要求によると、常にフォローアップ応答があります。また、POSTを使用している場合は、Redirect-After-Postパターンに従う必要があります。

URLには制限があります。 GETは、入力データが十分に短い場合にのみ機能します。だから美味しいAPIにはバグがあります。 GETパラメータを使用してすべての可能なURLを追加することはできません。

関連する問題