Create an APP interface (API) based on laravel)

Source: Internet
Author: User
Tags oauth
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

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.