Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to build a RESTful API?

The issue is this: I have a web application that runs on a PHP server. I'd like to build a REST api for it.
I did some research and I figured out that REST api uses HTTP methods (GET, POST...) for certain URI's with an authentication key (not necessarily) and the information is presented back as a HTTP response with the info as XML or JSON (I'd rather JSON).

My question is:

  1. How do I, as the developer of the app, build those URI's? Do I need to write a PHP code at that URI?
  2. How do I build the JSON objects to return as a response?
like image 743
Sharon Haim Pour Avatar asked Jan 13 '11 19:01

Sharon Haim Pour


People also ask

Can I make my own REST API?

Creating your own RESTful API can be a great way to build a business around data you've collected or a service you've created, or it can just be a fun personal project that allows you to learn a new skill. Here's a list of 20 tutorials on how to design your own REST API!


1 Answers

Here is a very simply example in simple php.

There are 2 files client.php & api.php. I put both files on the same url : http://localhost:8888/, so you will have to change the link to your own url. (the file can be on two different servers).

This is just an example, it's very quick and dirty, plus it has been a long time since I've done php. But this is the idea of an 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));  ?> 

I didn't make any call to the database for this example, but normally that is what you should do. You should also replace the "file_get_contents" function by "curl".

like image 116
Simon marc Avatar answered Oct 06 '22 23:10

Simon marc