7

私は、XML ファイルから分類された広告を読み取り、ユーザーがそれに対して CRUD 操作を実行できるようにするための、非常に迅速で単純な PHP アプリケーションを開発しました (これは宿題でした)。

私は現在、このアプリケーションを RESTful サービスに開発する任務を負っています。教授は、実際には RESTful サービスの経験がないようです。なぜなら、私の研究では、すべての RESTful 要件を実際には満たしていないことが示されているにもかかわらず、私のアプリケーションは次の課題に提出する必要があると彼は言ったからです。

とにかく、古い課題を提出して良い成績を得ることができたとしても、学習目的でこれを正しく行いたい. ただし、どこから始めればよいかわかりません。RESTful サービスが実際に何であるかは正確にはわかりません。

アドバイスを得る最善の方法は、以前の課題のサンプル コードを投稿して、私がどのように物事を処理したか、また代わりにどのように処理する必要があるかを確認することだと思います。

たとえば、ここに新しい広告を作成する方法があります。

Create.php

//Basically just a list of <INPUT TYPE = "text" NAME = "something"> in the <body> fields

CreateSuccess.php

<html><head><?php $simplerXML = simplexml_load_file('file.xml'); 
//Generate the basic ad information
$newAd = $simplerXML->addChild('advertisement','');
$newAd->addAttribute('category', $_POST["category"]);
$title = $newAd->addChild('title', $_POST["title"]);
$title->addAttribute('ID', $_POST["ID"]);
$pageTitle = $newAd->addChild('pagetitle', $_POST["pagetitle"]);
//etc, for all the SUBMIT boxes

//save the XML
$simplerXML->asXML('file.xml');
echo "<script type='text/javascript'>
//redirect back to ad listing page
window.onload = function () { top.location.href = 'ads.php'; };
</script>";
?></head>
<body></body></html>

RUD アクションにも URL パラメーターを使用しています。URL パラメータも許可されていないと聞きました。

ありがとう。

編集: SWITCH ステートメントは、index.php ファイルに含まれますか? そして、各ケースは関数を呼び出します。つまり、POST メソッドの CreateXML ですか? 必要なパラメータは、オブジェクト タイプ、オブジェクト ID、およびコンテンツ タイプですか? XML を更新するための値を取得するにはどうすればよいですか?入力ボックスのリストを含む Create.php ファイルに値を送信するだけですか?

4

2 に答える 2

15

サービスがすべてのCRUD操作をサポートしている場合は、RESTfulインターフェイスを実装することを常にお勧めします。そうすることはそれほど難しいことではありません。以下にいくつかの基本事項の概要を説明します。

RESTfulサービスは、単にいくつかのことを行います。

  1. CRUDアクションの通信にHTTPリクエスト方式を使用します
  2. HTTPステータスコードを使用して応答ステータスを伝達し、
  3. URIを使用して、リソース(ファイル、アクセスしているデータベース項目など)を定義します。
  4. ステートレスです

アイデアは、HTTP仕様ですでに定義されているこれらのもののカスタム通信の開発を最小限に抑えることです。


1-リクエスト方法

RESTfulサービスをサポートするために必要な4つのHTTPリクエストメソッドは次のとおりです。

  1. 役職
  2. 得る
  3. 置く
  4. 消去

オプションでサポートできます

  1. パッチ

次のように、これらをCRUDアクションに直接マッピングできます。

  • POST=作成
  • GET=取得
  • PUT=更新
  • DELETE=削除
  • PATCH =編集(部分的な更新、たとえば「パスワードの変更」。PUTは「置換」になります)
  • HEAD =ヘッダーのみ(リソースに関するメタデータ)

これを行うには、次のように単純なリクエストメソッドルーターを使用してリクエストを適切にルーティングします。

switch ($_SERVER["REQUEST_METHOD"]) {
    case "POST":
        // Create action
        break;
    case "GET":
        // Retrieve action
        break;
    case "PUT":
        // Update action
        break;
    case "DELETE":
        // Delete action
        break;
}

2- ステータスコードサービスからHTTPステータスコードをさらに実装して、ステータスをクライアントに通知する必要があります。例:

  • 20x=成功
  • 30x=リダイレクション
  • 40x=通信の問題
  • 50x=サーバーエラー

これを行うには、応答の前に適切なHTTPヘッダー出力を追加します。例:

header("Status: 500 Internal Server Error");

実装されているHTTPステータスコードの完全なリストは、http ://www.w3.org/Protocols/rfc2616/rfc2616-sec10.htmlで参照できます。


3-URI URI の場合、RESTfulサービスは通常、分類された命名に対してトップダウンアプローチに従います。

/object_type/id.content_type

例:

POST /user
PUT /user/1
GET /user/1.json
GET /user/1.html

mod_rewrite次のように、.htaccessファイル内でApacheを使用して、上記の規則に対応する非常に基本的なRESTfulルーターを実装できます。

RewriteEngine On
RewriteRule ^([^\/]+)\/([^\.]+)\.(\w+)$  index.php?object_type=$1&object_id=$2&content_type=$3

次にindex.php、適切にルーティングするための適切なobject_typeとidを探します。例:

$object = $_GET["object_type"];
$id = (int) $_GET["object_id"];
$content_type = $_GET["content_type"];

// Route from here to a class with the name of the object (e.g. UserController) via __autoload
// or to a file (e.g. user.php) via include, and pass id and content_type as params

4-無国籍 簡単に言えば、サーバーはクライアントの「状態」を維持しません。セッションやステータスを保存するための要件はありません。各リクエストは完全なトランザクションを表します。つまり、user / 1を取得した場合、サーバーはそれを実行したことを記憶せず、将来のリクエストは以前のリクエストに依存したり、影響を受けたりすることはありません。

これらの標準を実装すると、おめでとうございます。RESTfulサービスが構築されました。

于 2012-12-01T19:06:16.043 に答える