notafacil/image for Apigility
Images API Handler
This module is purposed to handle image for an API (create/upload, read, update, delete). It use MySQL with Doctrine ORM. This module is extendable to use another database adapter., (*1)
Currently this module has support these resources with required OAuth2 Authentication, (*2)
- POST /v1.0/image
- GET /v1.0/image/id
- PATCH /v1.0/image/id
- DELETE /v1.0/image/id
To retrieve the access token, you can use this resource POST /oauth
by use some params:, (*3)
- grant_type
- client_secret
- client_id
- username
- password
Dependencies
Installation
This is a ZF2/Apigility module, so to use it on your ZF2/Apigility project, need to add repositories
and require
on composer.json
., (*4)
"require": {
.
.
.
"notafacil/image": "1.1"
}
Run composer update
then enable the module on config/application.config.php
, (*5)
return array(
'modules' => array(
.
.
.
'Notafacil\\Image',
'ZF\\OAuth2\\Doctrine',
'DoctrineDataFixtureModule'
)
)
Configuration
Because of this module use doctrine/doctrine-orm-module
, we just need to configure database credential using configuration file. I prepare the config file here config/doctrine.local.php.dst
. Just copy this file to config/autoload/doctrine.local.php
and change the connection params
, (*6)
'connection' => array(
'orm_default' => array(
'driverClass' => 'Doctrine\\DBAL\\Driver\\PDOMySql\\Driver',
'params' => array(
'host' => '127.0.0.1',
'dbname' => 'apigility',
'user' => 'apigility',
'password' => 'apigility',
),
),
),
After that, we need to configure the image path
, thumbnail path
, original file path
and Asset Manager path
. The configuration file is here config/notafacil.image.local.php.dist
. Copy this file to config/autoload/notafacil.image.local.php
and adjust these configuration, (*7)
'asset_manager' => array(
'resolver_configs' => array(
'paths' => array(
'data/upload',
),
),
),
'images' => array(
'asset_manager_resolver_path' => 'data/upload',
'target' => 'data/upload/images/img',
'thumb_path' => 'data/upload/images/thumbs',
'ori_path' => 'data/upload/images/ori',
),
Make sure those paths are exists and writeable by Web Server
, but if you just use PHP built in web server
for development you don't need to change their permissions., (*8)
OAuth2
To enable OAuth2
Authentication, just copy default configuration files (config/oauth2.doctrine-orm.local.php.dist, config/oauth2.local.php.dist)
to config/autoload/oauth2.doctrine-orm.local.php
and config/autoload/oauth2.local.php
., (*9)
We also able to configure authorization
based on Scope
. Currently ACL by Scope
just supported by Client Credentials
Grant Type. This is caused by limitation from ZF-OAUTH2
. To add another Grant Type we should extend the ZF-OAUTH2
code. For configuration, just add configuration mentioned above (config/autoload/notafacil.image.local.php
), (*10)
'authorization' => array(
'scopes' => array(
'post' => array(
'resource' => 'Notafacil\Image\V1\Rest\Image\Controller::collection',
'method' => 'POST',
),
'update' => array(
'resource' => 'Notafacil\Image\V1\Rest\Image\Controller::entity',
'method' => 'PATCH',
),
'delete' => array(
'resource' => 'Notafacil\Image\V1\Rest\Image\Controller::entity',
'method' => 'DELETE',
)
)
),
Define Scope
name as key, and define resource
and method
wanna be authorized., (*11)
Database
This module use a tables image
, user
and another tables for OAuth2
. Currently it use MySQL
, but you can change it based on your need easily as long as the database is supported by Doctrine ORM
. If you have follow instructions above, it mean just remain creating the database table., (*12)
To do that just run this command from app skeleton
working directory, (*13)
vendor/bin/doctrine-module orm:schema-tool:create
Table will be created and if you wanna try the API with sample data. I have prepare them on the source code. Please run this command, (*14)
vendor/bin/doctrine-module data-fixture:import
Then run the API, (*15)
php -S 0.0.0.0:8080 -t public public/index.php
Example
Here are some screenshots I made while trying the API. I use Postman Chrome Extension
as REST Client
. You can use the same data with the screenshots, because I make it same in Data Fixtures
., (*16)
Request Access Token From OAuth Using Credential, Client ID and Client Secret
, (*17)
Then use the access token on Authorization Header
while send Request
to API, (*18)
Upload Image Using POST Method
, (*19)