![]() |
RestFul API |
HTTP methods:
GET: Used to retrieve and search data.
POST: Used to insert data.
PUT: Used to update data.
DELETE: Used to delete data.
Add below .htaccess file in your api folder http://localhost/api
RewriteEngine On
RewriteBase /api # if hosting api files on root use only /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php [QSA,L]
Database design and table:
database name => smartprogramming
table name => restAPI
column names => id, name, email, ip, date
db.sql
Database file run in your MySQL to create database and add data in table.
--
-- Table structure for table `restAPI`
--
CREATE TABLE `restAPI` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(240) NOT NULL,
`email` varchar(240) NOT NULL,
`password` varchar(240) NOT NULL,
`date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`ip` varchar(20) NOT NULL,
PRIMARY KEY (`id`)
Database configuration
Edit database name, user and password as per your configuration
function getConnection() {
try {
$db_username = "DATABASE_NAME";
$db_password = "********";
$conn = new PDO('mysql:host=localhost;dbname=root', $db_username, $db_password);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch(PDOException $e) {
echo 'ERROR: ' . $e->getMessage();
}
return $conn;
}
Implement API
We have created 5 API methods
- getUsers
- getUser
- findByName
- addUser
- updateUser
$app->get('/users', 'getUsers'); // Using Get HTTP Method and process getUsers function
$app->get('/users/:id', 'getUser'); // Using Get HTTP Method and process getUser function
$app->get('/users/search/:query', 'findByName'); // Using Get HTTP Method and process findByName function
$app->post('/users', 'addUser'); // Using Post HTTP Method and process addUser function
$app->put('/users/:id', 'updateUser'); // Using Put HTTP Method and process updateUser function
1. getUsers: $app->get(‘/users’, ‘getUsers’);
function getUsers() {
$sql_query = "select `name`,`email`,`date`,`ip` FROM restAPI ORDER BY name";
try {
$dbCon = getConnection();
$stmt = $dbCon->query($sql_query);
$users = $stmt->fetchAll(PDO::FETCH_OBJ);
$dbCon = null;
echo '{"users": ' . json_encode($users) . '}';
}
catch(PDOException $e) {
echo '{"error":{"text":'. $e->getMessage() .'}}';
}
}
This function simply return all users information as you can see in this query, to call this API use this URL http://localhost/api/users this is it for your first API using get route.
2. getUser: $app->get(‘/users/:id’, ‘getUser’); In this route we are sending id.
function getUser($id) {
$sql = "SELECT `name`,`email`,`date`,`ip` FROM restAPI WHERE id=:id";
try {
$dbCon = getConnection();
$stmt = $dbCon->prepare($sql);
$stmt->bindParam("id", $id);
$stmt->execute();
$user = $stmt->fetchObject();
$dbCon = null;
echo json_encode($user);
} catch(PDOException $e) {
echo '{"error":{"text":'. $e->getMessage() .'}}';
}
}
3. findByName: $app->get(‘/users/search/:query’, ‘findByName’); Route is used to search record with extra parameter and a search query with simple get method.
function findByName($query) {
$sql = "SELECT * FROM restAPI WHERE UPPER(name) LIKE :query ORDER BY name";
try {
$dbCon = getConnection();
$stmt = $dbCon->prepare($sql);
$query = "%".$query."%";
$stmt->bindParam("query", $query);
$stmt->execute();
$users = $stmt->fetchAll(PDO::FETCH_OBJ);
$dbCon = null;
echo '{"user": ' . json_encode($users) . '}';
} catch(PDOException $e) {
echo '{"error":{"text":'. $e->getMessage() .'}}';
}
}
4. addUser: $app->post(‘/users’, ‘addUser’); API used to add new record and accept post.
function addUser() {
global $app;
$req = $app->request(); // Getting parameter with names
$paramName = $req->params('name'); // Getting parameter with names
$paramEmail = $req->params('email'); // Getting parameter with names
$sql = "INSERT INTO restAPI (`name`,`email`,`ip`) VALUES (:name, :email, :ip)";
try {
$dbCon = getConnection();
$stmt = $dbCon->prepare($sql);
$stmt->bindParam("name", $paramName);
$stmt->bindParam("email", $paramEmail);
$stmt->bindParam("ip", $_SERVER['REMOTE_ADDR']);
$stmt->execute();
$user->id = $dbCon->lastInsertId();
$dbCon = null;
echo json_encode($user);
} catch(PDOException $e) {
echo '{"error":{"text":'. $e->getMessage() .'}}';
}
}
This API accept post request and insert submitted data in your database as we received parameters in starting of that function. To call this API I have used cURL, you can use jQuery or any other technique.
<?php
if($_POST){
echo post_to_url("http://localhost/users", $_POST);
} else{
?>
ADD RECORD.
<form action="" method="post">
<input type="text" name="name" placeholder="Name" /><br>
<input type="text" name="email" placeholder="Email" /><br>
<input type="hidden" name="_METHOD" value="POST" />
<input type="submit" value="A D D" />
</form>
<?php
}
?>
<input type="hidden" name="_METHOD" value="POST" /> <!-- POST data -->
<input type="hidden" name="_METHOD" value="PUT" /> <!-- PUT data -->
function post_curl($_url, $_data) {
$mfields = '';
foreach($_data as $key => $val) {
$mfields .= $key . '=' . $val . '&';
}
rtrim($mfields, '&');
$pst = curl_init();
curl_setopt($pst, CURLOPT_URL, $_url);
curl_setopt($pst, CURLOPT_POST, count($_data));
curl_setopt($pst, CURLOPT_POSTFIELDS, $mfields);
curl_setopt($pst, CURLOPT_RETURNTRANSFER, 1);
$res = curl_exec($pst);
curl_close($pst);
return $res;
}
5. updateUser: $app->put(‘/users/:id’, ‘updateUser’); This route accept put HTTP method
This API function update your data by id, to call this API we need to again use cURL and HTML form.
function updateUser($id) {
global $app;
$req = $app->request();
$paramName = $req->params('name');
$paramEmail = $req->params('email');
$sql = "UPDATE restAPI SET name=:name, email=:email WHERE id=:id";
try {
$dbCon = getConnection();
$stmt = $dbCon->prepare($sql);
$stmt->bindParam("name", $paramName);
$stmt->bindParam("email", $paramEmail);
$stmt->bindParam("id", $id);
$status->status = $stmt->execute();
$dbCon = null;
echo json_encode($status);
} catch(PDOException $e) {
echo '{"error":{"text":'. $e->getMessage() .'}}';
}
}
This API function update your data by id, to call this API we need to again use cURL and HTML form.
<?php
if($_POST){
echo post_to_url("http://localhost/users/".$_POST['id'], $_POST); // add id after last slash which you want to edit.
} else{
UPDATE RECORD.
<br>
<form action="" method="post">
<input type="text" name="id" placeholder="Id to update" /><br>
<input type="text" name="name" placeholder="Name" /><br>
<input type="text" name="email" placeholder="Email" /><br>
<input type="hidden" name="_METHOD" value="PUT" />
<input type="submit" value="U P D A T E" />
</form>
<?php
}
?>
Tags:
Programming
Very Helpful tutorial thanks....
ReplyDelete