star-inc /
abigail
Abigail is the fork from marcj/php-rest-service, which is a simple and fast PHP microservice framework for server side RESTful APIs.
Loading repository data…
marcj / repository
Php-Rest-Service is a very simple and fast PHP class for server-side RESTful JSON APIs.
Php-Rest-Service is a simple and fast PHP class for RESTful JSON APIs.
OPTIONS method based on PHPDoc (if OPTIONS is not overridden)GET, POST, PUT, DELETE, PATCH, HEAD and OPTIONShttpMethod as addition to the actual HTTP method.reflectionCreate a composer.json:
{
"require": {
"marcj/php-rest-service": "*"
}
}
and run
$ wget http://getcomposer.org/composer.phar
$ php composer.phar install
After the installation, you need to include the vendor/autoload.php to make the class in your script available.
include 'vendor/autoload.php';
#.htaccess
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule (.+) index.php/$1 [L,QSA]
// edit virtualhost /etc/nginx/conf.d/name_virtualhost_file
server {
.. something params ...
location / {
include fastcgi_params;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root/index.php;
}
}
// and add line to /etc/nginx/fastcgi_params
fastcgi_param PATH_INFO $fastcgi_script_name;
use RestService\Server;
Server::create('/')
->addGetRoute('test', function(){
return 'Yay!';
})
->addGetRoute('foo/(.*)', function($bar){
return $bar;
})
->addPostRoute('foo', function($field1, $field2) {
// do stuff with $field1, $field2 etc
// or you can directly get them with $_POST['field1']
})
->run();
index.php:
use RestService\Server;
Server::create('/admin', 'myRestApi\Admin')
->collectRoutes()
->run();
MyRestApi/Admin.php:
namespace MyRestApi;
class Admin {
/**
* Checks if a user is logged in.
*
* @return boolean
*/
public function getLoggedIn(){
return $this->getContainer('auth')->isLoggedIn();
}
/**
* @param string $username
* @param string $password
* return boolean
*/
public function postLogin($username, $password){
return $this->getContainer('auth')->doLogin($username, $password);
}
/**
* @param string $server
* @url stats/([0-9]+)
* @url stats
* @return string
*/
public function getStats($server = '1'){
return $this->getServerStats($server);
}
}
Generates following entry points:
+ GET /admin/logged-in
+ POST /admin/login?username=&password=
+ GET /admin/stats/([0-9]+)
+ GET /admin/stats
index.php:
use RestService\Server;
Server::create('/admin', new MyRestApi\Admin) //base entry points `/admin`
->setDebugMode(true) //prints the debug trace, line number and file if a exception has been thrown.
->addGetRoute('login', 'doLogin') // => /admin/login
->addGetRoute('logout', 'doLogout') // => /admin/logout
->addGetRoute('page', 'getPages')
->addPutRoute('page', 'addPage')
->addGetRoute('page/([0-9]+)', 'getPage')
->addDeleteRoute('page/([0-9]+)', 'deletePage')
->addPostRoute('page/([0-9]+)', 'updatePage')
->addGetRoute('foo/bar/too', 'doFooBar')
->addSubController('tools', \RestApi\Tools) //adds a new sub entry point 'tools' => admin/tools
->addDeleteRoute('cache', 'clearCache')
->addGetRoute('rebuild-index', 'rebuildIndex')
->done()
->run();
MyRestApi/Admin.php:
namespace MyRestApi;
class Admin {
public function login($username, $password){
if (!$this->validLogin($username, $password))
throw new InvalidLoginException('Login is invalid or no access.');
return $this->getToken();
}
public function logout(){
if (!$this->hasSession()){
throw new NoCurrentSessionException('There is no current session.');
}
return $this->killSession();
}
public function getPage($id){
//...
}
}
namespace RestAPI;
class Tools {
/**
* Clears the cache of the app.
*
* @param boolean $withIndex If true, it clears the search index too.
* @return boolean True if the cache has been cleared.
*/
public function clearCache($withIndex = false){
return true;
}
}
The response body is always a array (JSON per default) containing a status code and the actual data. If a exception has been thrown, it contains the status 500, the exception class name as error and the message as message.
Some examples:
+ GET admin/login?username=foo&password=bar
=>
{
"status": "200",
"data": true
}
+ GET admin/login?username=foo&password=invalidPassword
=>
{
"status": "500",
"error": "InvalidLoginException",
"message": "Login is invalid or no access"
}
+ GET admin/login
=>
{
"status: "400",
"error": "MissingRequiredArgumentException",
"message": "Argument 'username' is missing"
}
+ GET admin/login?username=foo&password=invalidPassword
With active debugMode we'll get:
=>
{
"status": "500",
"error": "InvalidLoginException",
"message": "Login is invalid or no access",
"line": 10,
"file": "libs/RestAPI/Admin.class.php",
"trace": <debugTrace>
}
+ GET admin/tools/cache
=>
{
"status": 200,
"data": true
}
Licensed under the MIT License. See the LICENSE file for more details.
Take a look into the code, to get more information about the possibilities. It's well documented.
Selected from shared topics, language and repository description—not editorial ratings.
star-inc /
Abigail is the fork from marcj/php-rest-service, which is a simple and fast PHP microservice framework for server side RESTful APIs.
salihtopcu /
Biblio PHP-Rest is a basic substructure for PHP Rest services.