This article describes how to create an APP interface (API) based on laravel. For more information, see
Preparations
Preface: why and what to do
My surname is a little white, and I have never been a programmer. but since my freshman year, I have been exposed to programming, and I have completely entered the world of programming.
This is not the case. Recently, I started to toss the APP again. it is really easy to develop an APP now. it can be done only with JavaScript and a little bit of HTML + css technology. However, the background of the APP is different. After an APP is developed and you want to read some data, you have to develop a background.
Laravel is one of my favorite PHP frameworks. Last year, I used laravel to write my personal website, but the roughness of my personal website made me very blushing. if you don't want to talk about it, let's go directly to the topic-install laravel first!
Basic Environment configuration
For detailed steps, see the documentation for laravel5.2 installation.
In my own environment, wampsrver2.5 is installed on win10, but it is worth noting that wampsrver2.5 has been used, and you need to change the content here. For more information, see my notes and click preview.
Tool: sublime
Browser: chrome (the plug-in postman to be used)
About APIs
Application Programming Interface (Application Programming Interface) is a number of predefined functions to provide applications and developers with the ability to access a group of routines based on a software or hardware, without accessing the source code or understanding the details of the internal working mechanism.
It should be noted that the API has its specific purpose and we should know what it is. What should I enter when accessing the API. What should I get after accessing the API.
When designing APIs, we should pay attention to these eight points
The content here is excerpted from the blog of the arrogant God.
The subsequent development plan is centered around this. (Really good summary)
1. Restful design principles
2. API naming
3. API security
4. data returned by the API
5. image processing
6. returned prompt information
7. online API test documentation
8. when the app is started, call an initialization API to obtain necessary information.
Use laravel to develop APIs
When I find this plug-in dingo/api, I just need to install it now!
First, the download is correct.
Add the following content to the newly installed laravel composer. json file:
Then open cmd and execute
composer update
Add in providers in config/app. php
App\Providers\OAuthServiceProvider::class,Dingo\Api\Provider\LaravelServiceProvider::class,LucaDegasperi\OAuth2Server\Storage\FluentStorageServiceProvider::class,LucaDegasperi\OAuth2Server\OAuth2ServerServiceProvider::class,
Add in aliases
'Authorizer' => LucaDegasperi\OAuth2Server\Facades\Authorizer::class,
Modify the content in the app/Http/Kernel. php file
protected $middleware = [\LucaDegasperi\OAuth2Server\Middleware\OAuthExceptionHandlerMiddleware::class,];protected $routeMiddleware = [ 'oauth' => \LucaDegasperi\OAuth2Server\Middleware\OAuthMiddleware::class, 'oauth-user' => \LucaDegasperi\OAuth2Server\Middleware\OAuthUserOwnerMiddleware::class, 'oauth-client' => \LucaDegasperi\OAuth2Server\Middleware\OAuthClientOwnerMiddleware::class, 'check-authorization-params' => \LucaDegasperi\OAuth2Server\Middleware\CheckAuthCodeRequestMiddleware::class, 'csrf' => \App\Http\Middleware\VerifyCsrfToken::class,];
Then execute
php artisan vendor:publish php artisan migrate
Add these configurations in the. env file
API_STANDARDS_TREE = x
API_SUBTYPE = rest
API_NAME = REST
API_PREFIX = api
API_VERSION = v1
API_CONDITIONAL_REQUEST = true
API_STRICT = false
API_DEBUG = true
API_DEFAULT_FORMAT = json
Modify the app \ config \ oauth2.php file
'grant_types' => [ 'password' => [ 'class' => 'League\OAuth2\Server\Grant\PasswordGrant', 'access_token_ttl' => 604800, 'callback' => '\App\Http\Controllers\Auth\PasswordGrantVerifier@verify', ],],
Create a service provider and create the OAuthServiceProvider. php file under app/Providers as follows:
namespace App\Providers;use Dingo\Api\Auth\Auth;use Dingo\Api\Auth\Provider\OAuth2;use Illuminate\Support\ServiceProvider;class OAuthServiceProvider extends ServiceProvider{ public function boot() { $this->app[Auth::class]->extend('oauth', function ($app) { $provider = new OAuth2($app['oauth2-server.authorizer']->getChecker()); $provider->setUserResolver(function ($id) { // Logic to return a user by their ID. }); $provider->setClientResolver(function ($id) { // Logic to return a client by their ID. }); return $provider; }); } public function register() { // }}
Then open routes. php and add related routes.
//Get access_tokenRoute::post('oauth/access_token', function() { return Response::json(Authorizer::issueAccessToken());});//Create a test user, you don't need this if you already have.Route::get('/register',function(){ $user = new App\User(); $user->name="tester"; $user->email="test@test.com"; $user->password = \Illuminate\Support\Facades\Hash::make("password"); $user->save();});$api = app('Dingo\Api\Routing\Router');//Show user info via restful service.$api->version('v1', ['namespace' => 'App\Http\Controllers'], function ($api) { $api->get('users', 'UsersController@index'); $api->get('users/{id}', 'UsersController@show');});//Just a test with auth check.$api->version('v1', ['middleware' => 'api.auth'] , function ($api) { $api->get('time', function () { return ['now' => microtime(), 'date' => date('Y-M-D',time())]; });});
Create BaseController. php and UsersController. php respectively as follows:
// BaseControllernamespace App \ Http \ Controllers; use Dingo \ Api \ Routing \ Helpers; use Illuminate \ Routing \ Controller; class BaseController extends Controller {use Helpers ;} // UsersControllernamespace App \ Http \ Controllers; use App \ User; use App \ Http \ Controllers \ Controller; class UsersController extends BaseController {public function index () {return User :: all ();} public function show ($ id) {$ user = User: findOrFail ($ id ); // return $ this-> response-> array ($ user-> toArray ());}}
Then, create PasswordGrantVerifier. php under app/Http/Controllers/Auth/as follows:
namespace App\Http\Controllers\Auth;use Illuminate\Support\Facades\Auth;class PasswordGrantVerifier{ public function verify($username, $password) { $credentials = [ 'email' => $username, 'password' => $password, ]; if (Auth::once($credentials)) { return Auth::user()->id; } return false; }}
Open the oauth_client table of the database and add a new client data
INSERT INTO 'oauth_clients' ('id', 'secret', 'name', 'created_at', 'updated_at') VALUES ('1', '2', 'Main website', '2016–03–13 23:00:00', '0000–00–00 00:00:00');
The next step is to have a pleasant test. the APIs to be tested here are:
Add a user
Http: // localhost/register
Read all user information
Http: // localhost/api/users
Only information with user ID 4 is returned.
Http: // localhost/api/users/4
Get access_token
Http: // localhost/oauth/access_token
Use the token value to obtain the time. only when the token value is correct can the correct value be returned.
Http: // localhost/api/time
Open PostMan