5

PHPのRestfulチュートリアルをたくさん読みました。

(RoRを使用しない理由については詳しく説明したくありません。これは、チームがPHPに精通しているためです)

APIを使用するように将来拡張することを計画しているので、RestfulWebサービスを実装することが重要であると読みました。

私は次のようなチュートリアルを見てきました

http://www.gen-x-design.com/archives/create-a-rest-api-with-php/

どうやら安らかなはWebサービスのためのものです。

ウェブページはどうですか?それらもRESTFULにすることができますか?

答えが「いいえ」の場合は、この線を超えないで、教えてください。ありがとうございました。

URLをRESTFULURLのように見せることは、単にmod_rewriteを使用することです。ただし、確かに、RESTfulアーキテクチャは、URLの見栄えを良くするだけではありません。

たとえば、list.phpというWebページにアイテムのリストがあります。各アイテムの横には削除リンクがあります。例:list.php?id = 1&deleteitem

誰かがlist.php?id = 1&deleteitemリンクをクリックすると、もちろん同じlist.phpファイルに戻って、$_GETのparamdeleteitemを確認します。

検出された場合、$_GETのパラメータIDに基づいてデータベースから削除します。

その後、パラメータなしでlist.phpにリダイレクトします。

このフロー全体をRESTFULにするにはどうすればよいですか?

RESTでは、何かを削除するには、HTTPリクエストメソッド(DELETE)を使用する必要があるためです。

明らかに私のリンクでは、それらはすべて単に単純です<a href="list.php?id=1&deleteitem">Delete</a>

教えてください。

私のプログラミングはそれほど強力ではないので、与えられたアドバイスが可能な限り素人であることができればそれは良いことです。

ありがとうございました。

編集

フォローアップの質問が2つあります。

質問1)これはページング付きのアイテムのリストですが、RESTfulにしたい場合、URLはどのようになりますか?

質問2)リスト内のすべての項目の横にDELETEリンクを配置しているので、今は理解しています。

<form method="POST">
<input type=hidden name="_method" value="delete">
<input type="submit" >
</form>

代わりは。

ただし、フォームはどこに投稿する必要がありますか?アイテムのURL?/ items / {item-id}

しかし、データベースの行を正常に削除した後、成功メッセージを表示するこのリストページに戻りたいと思います。

また、このリストページを成功メッセージで更新するときにポップアップメッセージを表示しないようにします。

このlist.phpURLに投稿し直すと、RESTfulではありませんか?以下の回答から、各アイテムは独自のURLを必要とするリソースであると言われているためです。

教えてください。ありがとうございました。

4

5 に答える 5

6

RESTfulは、Webサービスを参照するときに一般的に使用されますが、Webページにも非常によく適用できます。一言で言えば、RESTfulであるということはリソースを扱うことです。リソースには、人、本、映画、劇場、チケットなど、好きなものを何でもかまいません。

リソースに対して実行できる基本的な操作は4つあります。

  • 作成(POST)
  • 読む(GET)
  • 更新(PUT)
  • 削除(DELETE)

PUTほとんどのWebブラウザはandアクションをサポートしていないため、DELETEデータの送信にはPOSTアクションのみを使用できます。_methodRailsは、フレームワークが取得し、その値に応じてルーティングするという名前の非表示パラメーターを渡すことにより、PUTとDELETEを偽造します。

また、GET破壊的なアクションには絶対に使用しないでください。リソースの状態を変更するアクションは、、、または変更に応じて呼び出す必要があります(POST必要PUTDELETE応じてPOSTを使用した偽のPUT / DELETE)。

RailsでRESTfulルーティングが処理される方法を確認して、他に何もないとしても、アイデアを得ることをお勧めします。上記の4つのアクションは、可能な限りリソースを変更するのに十分ですが、Railsは、有用と思われる他の3つのタイプのアクションも紹介します。

  • インデックス(すべてのアイテムのリストビュー)
  • new(通常は新しいリソースを追加するためのフォームビュー)
  • 編集(通常、既存のリソースを更新するためのフォームビュー)

きれいなURLは、RESTfulサイトを設計するときに間違いなくテーブルにありますが、おそらく最大の利点は、コードの品質が自動的に向上することです。リソースのみを扱っていて、リソースに適用できる潜在的なアクションが4つしかない場合、状況は自動的にクリーンアップされ始めます。

編集1:自己記述的なURLが好まれ、あなたの生活を楽にしますが、リソースを一意に識別し、HTTP動詞を使用してそれを管理する不可解なURLを作成することを止めることはできません。リソースを一意に識別するための以下のようなURL(md5を使用)は完全にRESTfulです。

// represents a person "John Doe"
http://example.com/4c2a904bafba06591225113ad17b5cec

// represents the movie "Lord of the Rings: The Two Towers"
http://example.com/1d9198260dec7bda3fb21e232d60fec3

// represents the "Formula One" sport
http://example.com/fs340as?id=23xa12&type=SP012Ts

それが、まさにそこにあるRepresentationalStateTransferです。MD5ハッシュは、一定のままであるリソースのメールアドレスのようなものです。表現は、映画の詳細(html / xml / json / etc。)、またはクライアントの機能に応じて映画自体のビデオである可能性があります。

編集2countries :世界のコレクションであるリソースがあるとしましょう。これは、次のようなURIおよびHTTP動詞で表すことができます。

GET /countries

ページングは​​リソース自体ではなくアプリケーションのプロパティであるため、クエリ文字列パラメーターを指定してそれを制御できます。

GET /countries?page=1

国は、国のリソースの一部であるリソースでもあります。次のようなURLで国を特定できます。

/countries/<id>

そして、この国での操作は、次の動詞を使用して実行できます。

GET    /countries/<id>
POST   /countries  -- the new country has no existing representation
PUT    /countries/<id>
DELETE /countries/<id>
于 2010-03-06T08:27:03.293 に答える
2

短い答え:はい。RESTは両方に対応しています。これは、すべてのWebサイトの中で最も単純なものであっても、ゲストブックにエントリを追加するには、ページを取得し、個人データをPOSTする必要があるためです。その点で、私たちは皆、何らかの形でRESTに準拠しています。

あなたの場合、ブラウザの実装が不十分だと、純粋なRESTfulな方法を実装するのが難しくなります。DELETEはJavascriptなしではサポートされていないため、いずれにせよGETまたはPOST(どちらもRESTのDELETEとはまったく異なる意味を持ちます)を使用する必要があります。

于 2010-03-06T08:17:55.103 に答える
1

安らかなアプローチは、Webページでも確実に使用できます。あなたが言及している副作用のために、URLにコマンドを入れることは良い考えではありません。データベースを変更するとき(またはモデルを変更する場合は何でも)、POSTコマンドを使用します。

もちろん、主要なWebブラウザにはPUTとDELTEはありませんが、method= "PUT"、method= "DELETE"などの特定のパラメータを使用して、いつでも単純なPOSTを送信できます。

于 2010-03-06T08:17:28.527 に答える
1

Zend Frameworkの上に小さなフレームワークを作成して、RESTfulインターフェイスの実装を容易にしました。

http://github.com/mikekelly/Resauce

WebサービスやWebサイトに使用できます。基本的に、WebサイトはHTMLによって駆動される単なるWebサービスです。

于 2010-03-06T09:13:37.117 に答える
1

RESTfulは、「美しいURI」ではないことを意味します。URIがリソースを識別するという事実にもかかわらず、RESTがURIについて言うのは、「削除」のようなアクションパラメーターを含めるべきではないということだけです。

あなたの場合、あなたは電話します

DELETE /items/6793

回答は通常200 OK、メッセージ本文として変更されたリストを含むステータスコードになります。参照: http: //restpatterns.org/HTTP_Methods/DELETE

HTML 4はGETとPOST以外のフォームアクションをサポートしていないため、非表示のパラメーターを回避し、サーバー側でHTTPメソッドをオーバーライドする必要があります。

于 2010-03-06T09:28:24.950 に答える