[解決済み] REST API - なぜ PUT DELETE POST GET を使用するのですか?
質問
そこで、REST APIの作成に関するいくつかの記事に目を通していました。
そして、それらのいくつかは、次のようなすべてのタイプのHTTPリクエストを使用することを示唆している。
PUT
DELETE
POST
GET
.
例えば、次のように作成します。
index.php
というように、APIを記述します。
$method = $_SERVER['REQUEST_METHOD'];
$request = split("/", substr(@$_SERVER['PATH_INFO'], 1));
switch ($method) {
case 'PUT':
....some put action....
break;
case 'POST':
....some post action....
break;
case 'GET':
....some get action....
break;
case 'DELETE':
....some delete action....
break;
}
もちろん、私はウェブサービスについてあまり知りません。
しかし、単に
JSON
オブジェクトを通常の
POST
または
GET
(メソッド名とすべてのパラメータを含む)、そして同様にJSONで応答します。シリアライズ/デシリアライズを簡単に行うには、PHP の
json_encode()
と
json_decode()
というように、異なる HTTP リクエストメソッドを扱うことなく、そのデータでやりたいことを何でもできるようになります。
何か見逃していることがあるのでしょうか?
UPDATE 1:
OK - さまざまなAPIを調べて、多くのことを学びました。 XML-RPC , JSON-RPC , SOAP , REST このようなAPIは健全であるという結論に達しました。実際、stack exchangeは彼らのサイトでこのアプローチをほとんど使っていて、この人たちは自分たちが何をしているかを知っているのだと思う。 スタック・エクスチェンジ API .
解決方法は?
の考え方は RE プレゼンティブ S テート T 転送は、最もシンプルな方法でデータにアクセスすることではありません。
JSONにアクセスするためにポストリクエストを使用することを提案されましたが、これはデータにアクセス/操作するための完全に有効な方法です。
RESTは、以下のための方法論です。 意味のある にアクセスすることができます。RESTのリクエストを見ると、そのデータで何が起こっているのかがすぐにわかるはずです。
例えば
GET: /cars/make/chevrolet
は、シボレー車のリストを返すようです。
優れたREST APIでは、クエリ文字列の中に、次のような出力オプションを組み込むこともできます。
?output=json
または
?output=html
を使用すると、アクセッサが情報をどのような形式でエンコードすべきかを決定できるようになります。
REST APIにデータの型付けを合理的に組み込む方法について少し考えた結果、データの型を明示的に指定するには、すでにあるファイル拡張子を利用する、例えば
.js
,
.json
,
.html
または
.xml
. ファイル拡張子がない場合は、デフォルトの形式 (JSONなど) を使用します。
501 Not Implemented
ステータスコード
.
別の例
POST: /cars/
{ make:chevrolet, model:malibu, colors:[red, green, blue, grey] }
は、関連する色を持つ新しい Chevy Malibu を db 内に作成することになりそうです。つまり 可能性が高い REST apiはデータベースの構造に直接関係する必要がないためです。真のデータを保護するためのマスキングインターフェイスに過ぎません(データベース構造のアクセッサとミューテータのようなものだと考えてください)。
では、次に
べき乗
. 通常、RESTは
CRUD
をHTTP上で実行します。HTTPでは
GET
,
PUT
,
POST
と
DELETE
をリクエストに使用します。
RESTの非常に単純化された実装 かもしれない は、次のようなCRUDマッピングを使用します。
Create -> Post
Read -> Get
Update -> Put
Delete -> Delete
この実装には問題があります。Postは非べき等なメソッドとして定義されています。つまり、同じ Post メソッドを続けて呼び出すと、結果的に 異なる サーバーの状態です。Get、Put、Deleteはべき乗です。つまり、これらを複数回呼び出すと、サーバーの状態は同じになるはずです。
つまり、次のようなリクエストは
Delete: /cars/oldest
は、実際には次のように実装することができる。
Post: /cars/oldest?action=delete
ここで
Delete: /cars/id/123456
は、1回呼び出した場合も、1000回呼び出した場合も、同じサーバー状態になります。
を削除した場合のより良い処理方法です。
oldest
の項目を要求することであろう。
Get: /cars/oldest
を使用し
ID
を結果データから作成し
delete
をリクエストしてください。
Delete: /cars/id/[oldest id]
この方法の問題点は、別の
/cars
という項目が追加されました。
/oldest
が要求されたときと
delete
が発行されました。
関連
-
[解決済み】stdClassクラスのオブジェクトが文字列に変換されない。
-
[解決済み】子テーマのCSSが親テーマをオーバーライドしない
-
[解決済み] オートロードとは何ですか; spl_autoload、__autoload、spl_autoload_register はどのように使うのですか?
-
[解決済み] cURLでJSONデータをPOSTするにはどうすればよいですか?
-
[解決済み] YouTube APIからYouTubeビデオのサムネイルを取得する方法を教えてください。
-
[解決済み] PHPでリクエストタイプを検出する(GET, POST, PUT, DELETE)
-
[解決済み] RESTリソースの命名規則はSingularとPluralのどちらを使用すべきですか?
-
[解決済み] URLクエリパラメータを含むHTTP POST -- 良いアイデアかどうか?
-
[解決済み】HTTPのPOSTとPUTの違いは何ですか?
-
[解決済み】REST APIでのPUTメソッドとPATCHメソッドの使い分け 実生活でのシナリオ
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】XAMPPポート80をPID 4の「Unable to open process」が使用中 [重複] XAMPPポート80をPID 4の「Unable to open process」が使用中。]
-
[解決済み] [Solved] Fatal error: メンバ関数bind_param()のbooleanに対する呼び出し [重複] [重複
-
[解決済み】mysqli_result クラスのオブジェクトを文字列に変換できない
-
[解決済み】メンバ関数をnullで呼び出す?
-
[解決済み】ディレクトリ内のファイル数を数える PHP
-
[解決済み】PHPからPythonスクリプトを実行する
-
[解決済み】Fatal error: mysqli_result 型のオブジェクトは使用できません [終了] 。
-
[解決済み] mysqli_fetch_assoc() は、パラメータ 1 が mysqli_result であることを期待し、boolean が与えられる [重複] 。
-
[解決済み] GET] "/users/sign_out" に一致するルートはありません。
-
[解決済み] RESTリソースとは何ですか?