RESTful APIを構築する方法とは?
2023-08-25 13:37:12
質問
問題はこれです。
私はPHPサーバー上で動作するWebアプリケーションを持っています。私はそのためのREST apiを構築したいと思います。
私はいくつかの研究を行い、REST apiは認証キー(必ずしもそうではない)を持つ特定のURIに対してHTTPメソッド(GET、POST...)を使用し、情報はXMLまたはJSON(私はむしろJSON)として情報を持つHTTP応答として返されることを発見しました。
私の質問は
- アプリの開発者として、私はどのようにそれらの URI を構築するのでしょうか。その URI で PHP コードを書く必要があるのでしょうか?
- 応答として返す JSON オブジェクトをどのように構築すればよいのでしょうか?
どのように解決するのですか?
ここでは、簡単なPHPの例を示します。
2つのファイルがあります
client.php
&です。
api.php
. 私は同じURLに両方のファイルを置く。
http://localhost:8888/
に置いたので、リンクをあなた自身のURLに変更する必要があります。(ファイルは2つの異なるサーバーにあることができます)。
これは単なる例で、非常に迅速かつ汚いものです。しかし、これはapiのアイデアです。
client.php
<?php
/*** this is the client ***/
if (isset($_GET["action"]) && isset($_GET["id"]) && $_GET["action"] == "get_user") // if the get parameter action is get_user and if the id is set, call the api to get the user information
{
$user_info = file_get_contents('http://localhost:8888/api.php?action=get_user&id=' . $_GET["id"]);
$user_info = json_decode($user_info, true);
// THAT IS VERY QUICK AND DIRTY !!!!!
?>
<table>
<tr>
<td>Name: </td><td> <?php echo $user_info["last_name"] ?></td>
</tr>
<tr>
<td>First Name: </td><td> <?php echo $user_info["first_name"] ?></td>
</tr>
<tr>
<td>Age: </td><td> <?php echo $user_info["age"] ?></td>
</tr>
</table>
<a href="http://localhost:8888/client.php?action=get_userlist" alt="user list">Return to the user list</a>
<?php
}
else // else take the user list
{
$user_list = file_get_contents('http://localhost:8888/api.php?action=get_user_list');
$user_list = json_decode($user_list, true);
// THAT IS VERY QUICK AND DIRTY !!!!!
?>
<ul>
<?php foreach ($user_list as $user): ?>
<li>
<a href=<?php echo "http://localhost:8888/client.php?action=get_user&id=" . $user["id"] ?> alt=<?php echo "user_" . $user_["id"] ?>><?php echo $user["name"] ?></a>
</li>
<?php endforeach; ?>
</ul>
<?php
}
?>
api.php
<?php
// This is the API to possibility show the user list, and show a specific user by action.
function get_user_by_id($id)
{
$user_info = array();
// make a call in db.
switch ($id){
case 1:
$user_info = array("first_name" => "Marc", "last_name" => "Simon", "age" => 21); // let's say first_name, last_name, age
break;
case 2:
$user_info = array("first_name" => "Frederic", "last_name" => "Zannetie", "age" => 24);
break;
case 3:
$user_info = array("first_name" => "Laure", "last_name" => "Carbonnel", "age" => 45);
break;
}
return $user_info;
}
function get_user_list()
{
$user_list = array(array("id" => 1, "name" => "Simon"), array("id" => 2, "name" => "Zannetie"), array("id" => 3, "name" => "Carbonnel")); // call in db, here I make a list of 3 users.
return $user_list;
}
$possible_url = array("get_user_list", "get_user");
$value = "An error has occurred";
if (isset($_GET["action"]) && in_array($_GET["action"], $possible_url))
{
switch ($_GET["action"])
{
case "get_user_list":
$value = get_user_list();
break;
case "get_user":
if (isset($_GET["id"]))
$value = get_user_by_id($_GET["id"]);
else
$value = "Missing argument";
break;
}
}
exit(json_encode($value));
?>
この例では、データベースへの呼び出しは行いませんでしたが、通常はそうする必要があります。また、"file_get_contents" 関数を "curl" で置き換える必要があります。
関連
-
[解決済み】接続の取得に失敗しました: php_network_getaddresses: getaddrinfo failed: 名前またはサービスが不明
-
[解決済み】Weird PHP error: 'Can't use function return value in write context'.
-
[解決済み] [Solved] Fatal error: メンバ関数prepare()のNULLでの呼び出し
-
[解決済み】 libapache2-mod-php7 パッケージが見つからない。
-
thinkphp5 timestamp 非整形の数値に遭遇した。
-
[解決済み] cURLでJSONデータをPOSTするにはどうすればよいですか?
-
[解決済み] YouTube APIからYouTubeビデオのサムネイルを取得する方法を教えてください。
-
[解決済み] RESTを理解する。動詞、エラーコード、認証
-
[解決済み】RESTful 認証
-
[解決済み】REST API 404。不正な URI、またはリソースの欠落?
最新
-
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」が使用中。]
-
[解決済み】move_uploaded_fileは、「failed to open stream: Permission denied" というエラーが出る
-
[解決済み] コマンドの同期がとれていない。
-
[解決済み】「セッションキャッシュリミッターを送信できません - ヘッダーはすでに送信されています」【重複】。
-
[解決済み] SQLSTATE[HY093]: 無効なパラメータ番号: バインドされた変数の数が102行目のトークンの数と一致しない [終了]
-
[解決済み】phpMyAdmin: シークレットパスフレーズ?
-
[解決済み] 正しいJSONコンテンツタイプは何ですか?
-
[解決済み] PHPスクリプトからJSONを返す
-
[解決済み] PHPでリクエストタイプを検出する(GET, POST, PUT, DELETE)
-
[解決済み] JSONPの解析 $http.jsonp() レスポンスをangular.jsで解析する