1. ホーム
  2. php

RESTful APIを構築する方法とは?

2023-08-25 13:37:12

質問

問題はこれです。 私はPHPサーバー上で動作するWebアプリケーションを持っています。私はそのためのREST apiを構築したいと思います。

私はいくつかの研究を行い、REST apiは認証キー(必ずしもそうではない)を持つ特定のURIに対してHTTPメソッド(GET、POST...)を使用し、情報はXMLまたはJSON(私はむしろJSON)として情報を持つHTTP応答として返されることを発見しました。

私の質問は

  1. アプリの開発者として、私はどのようにそれらの URI を構築するのでしょうか。その URI で PHP コードを書く必要があるのでしょうか?
  2. 応答として返す 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" で置き換える必要があります。