php-RESTfulAPIでクリーンURLを使用する
「RESTfulURL」とも呼ばれる「クリーンURL」は、ユーザーフレンドリーで純粋に構造的であり、クエリ文字列を含みません。代わりに、リソースのパスのみが含まれています。
ie: "http://twitter.com/users/show/" + username+"。json"
サーバー側の機能に関する質問:
-
ディレクトリごとに一意のサーバー側APIスクリプトを作成する必要がありますか?
-
すべてのリクエストを1つのスクリプトに転送できますか?転送するにはどうすればよいですか? クリーンURL構造($ _GET ['url_structure'])から有用な情報を取得しますか?
Twitterが.jsonファイルを呼び出す理由 それは確かに存在しません。要求に応じて生成する必要があります。どのように これは機能しますか?これは私に質問への答えを信じさせる 2は「はい」です。
答え :
解決策:
1) RecessPHP のようなRESTfulフレームワークを使用する場合、または.htaccessファイルでmod_rewriteルールを使用する場合はすべてのAPIリクエストを単一のPHPファイル(フロントコントローラーと呼ばれる)にリダイレクトします。
.htaccess
RewriteEngine On
RewriteRule ^/api/ api.php
api.php
$request = $_SERVER['REQUEST_URI']; //this would be /users/show/abc.json
2) apacheのrewriteモジュールを使用して、すべてのapiリクエストをそれらを処理する特別なPHPファイルにリダイレクトできます。 Apacheの構成に応じて、元の要求された(RESTful)URLはPHPのサーバー変数に格納されます。これは $_SERVER['REQUEST_URI']
だと思います。もちろん、RESTfulURLを含む$_GET[]
変数をPHPに渡すこともできます。
.htaccess
RewriteEngine On
RewriteRule ^/api/([^\.]+).(xml|json|atom) api.php?url=$1&type=$2
api.php
$request_parts = explode('/', $_GET['url']); // array('users', 'show', 'abc')
$file_type = $_GET['type'];
$output = get_data_from_db(); //Do your processing here
//You can outsource to other files via an include/require
//Output based on request
switch($file_type) {
case 'json':
echo json_encode($output);
break;
case 'xml':
echo xml_encode($output); //This isn't a real function, but you can make one
break;
default:
echo $output;
}
3) Twitter(および他の多くのAPI)は、アプリケーションがAPIから期待する形式を提供する便利な方法であるため、これを使用します。すべてのAPIリクエストは、すべてのファイルの作成とその内容の出力へのエコーを処理する単一のPHPファイルに再ルーティングされます。ファイルが実際にサーバーに保存されることはありません(キャッシュされている場合を除く)。
優れたリソース
- mod_rewrite、初心者向けガイド
- PHPを使用してRESTAPIを作成する
- リセスPHPフレームワーク|チュートリアル
RecessPHPに関する注意。それは確かに素晴らしいツールであり、私はあなたがそれを見るのをお勧めします(多分それがどのように物事を処理するかについてのアイデアを得るためにそのソースで)、しかしそれは私には少し不格好に思えます。パス名が特別なコメントで書かれているという事実は、私には非常にそうではないようです-PHP。私はこれから離れて、それを完璧なフレームワークとは言いませんが、それは確かに始まりです。頑張ってください!
答え :
解決策:
これは私にとってはうまくいきました: これをウェブサイトのルートにあるhtaccessファイルに入れてください。
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule api/(.*)$ api/api.php?request=$1 [QSA,NC,L]
RewriteRule (recipe/.*) api/app.php?request=$1 [QSA,NC,L]
</IfModule>
次に、 http:// localhost / api / person /susanのページに移動すると http://localhost/api/api.phpのファイルに移動することがわかります。 http:// localhost / recipe / edit /2を使用してアクセスするレシピページもあります これをapi.phpファイルに入れます:
<?php
$requestParts = explode('/',$_GET['request']);
$category = $requestParts[0];
$action = $requestParts[1];
$data = $requestParts[2];
if($category == 'recipe'){
include($_SERVER['DOCUMENT_ROOT'].'/pages/add_recipe.php');
}
上記の変数は、カテゴリ:レシピ、アクション:追加または編集、およびレシピのIDまたは希望する数値を指定できるデータを保持します。次に、add_recipe.php内で変数を使用して、レシピを編集しているか追加しているかを判別します。また、APIを使用する場合は、APIとの通信に使用しているajaxリクエストに応じてさまざまなファイルを含めることができます。
答え :
解決策:
これを試してください:
RewriteRule ^([^/]+)\/([^/]+)\/?$ getdata.php?para1=$1¶2=$2 [NC]
同様の質問
私たちのウェブサイトで同様の質問で答えを見つけてください。