Setting up the Restful API is easy with Slim Framework & Eloquent(Laravel). Here are the steps:
- Install required components via composer – Slim Framework + Eloquent(Laravel)
- Create a database called
web_services
and create users
table.
- Setting up Eloquent
- Setting up Routes
- Final Touch

Web Service Restful API
Install the necessary components using composer – create a composer.json
and save it in a working directory and run composer install
.
{
"name": "Web Services",
"require": {
"php": ">=5.3.0",
"slim/slim": "2.*",
"slim/views": "0.1.*",
"illuminate/database": "5.0.*",
"illuminate/events": "5.0.*"
},
"autoload": {
"classmap": [
"models"
]
}
}
We’re creating a simple web services for Users – Simple CRUD. Create a database called web_services
and run the following SQL statement to create user
table.
CREATE TABLE `users` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(255) DEFAULT NULL,
`email` varchar(255) DEFAULT NULL,
`phone` varchar(45) DEFAULT NULL,
`created_at` datetime DEFAULT NULL,
`updated_at` datetime DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
Next, setting up the Eloquent. Create a database.php
in config
folder(Please create this folder in the working directory) folder.
$database = [
'driver' => 'mysql',
'host' => 'localhost',
'database' => 'web_services',
'username' => 'root',
'password' => '',
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
];
use IlluminateDatabaseCapsuleManager as Capsule;
$capsule = new Capsule;
$capsule->addConnection($database);
// Set the event dispatcher used by Eloquent models... (optional)
use IlluminateEventsDispatcher;
use IlluminateContainerContainer;
$capsule->setEventDispatcher(new Dispatcher(new Container));
// Make this Capsule instance available globally via static methods... (optional)
$capsule->setAsGlobal();
// Setup the Eloquent ORM... (optional; unless you've used setEventDispatcher())
$capsule->bootEloquent();
Once we’re done with Eloquent, next we going to set up the routes for Users CRUD operations. Save your time, copy & paste the following codes and save it in config/routes.php
.
<?php
$app->get('/api/users', function () {
echo User::all()->toJson();
});
$app->get('/api/users/:id', function($id) {
try {
echo User::find($id)->toJson();
} catch (Exception $e) {
echo '{"error":{"text":'. 'Unable to get the web service. ' . $e->getMessage() .'}}';
}
});
$app->get('/api/users/search/:query', function($query) {
echo User::where('name', '=', $query)->get()->toJson();
});
$app->post('/api/users/add', function() use ($app) {
try {
$user = new User;
$user->name = $app->request()->post('name');
$user->phone = $app->request()->post('phone');
$user->email = $app->request()->post('email');
if($user->save()) {
echo '{"message":"Successfully add new user"}';
} else {
echo '{"message":"Failed to add new user"}';
}
} catch (Exception $e) {
echo '{"error":{"text":'. 'Unable to get the web service. ' . $e->getMessage() .'}}';
}
});
$app->put('/api/users/update/:id', function($id) use ($app) {
try {
$user = User::find($id);
$user->name = $app->request()->post('name');
$user->phone = $app->request()->post('phone');
$user->email = $app->request()->post('email');
if($user->save()) {
echo '{"message":"Successfully update user info"}';
} else {
echo '{"message":"Failed update user info"}';
}
} catch (Exception $e) {
echo '{"error":{"text":'. 'Unable to get the web service. ' . $e->getMessage() .'}}';
}
});
$app->delete('/api/users/:id', function($id) {
$user = User::find($id);
if($user->delete()) {
echo '{"message":"Successfully delete user"}';
} else {
echo '{"message":"Failed to delete user"}';
}
});
OK, here the final touch! 2 things to do, one the index.php
and the other one is .htaccess
. Here the index.php
. Please take note, we require the header("Access-Control-Allow-Origin: *");
, to ensured that we can access this Restful API from other domains. There might be security issues. Comments are welcomed.
<?php
try {
header("Access-Control-Allow-Origin: *");
require 'vendor/autoload.php';
require 'config/database.php';
require 'config/initialize.php';
} catch (Exception $e) {
echo '{"error":{"text":'. 'Unable to start up the web service. ' . $e->getMessage() .'}}';
}
The .htaccess
.
RewriteEngine On
# Some hosts may require you to use the `RewriteBase` directive.
# If you need to use the `RewriteBase` directive, it should be the
# absolute physical path to the directory that contains this htaccess file.
#
# RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [QSA,L]
Source code available at: Web Service(Restful API)
I Have 3 demo available:
- Web Service App
- Web Service Demo
- Web Service Mobile Demo