Home  >  Article  >  PHP Framework  >  Making API interface based on laravel

Making API interface based on laravel

L
Lforward
2020-05-28 16:03:296547browse

Making API interface based on laravel

About API

##API (Application Programming Interface, application programming interface) is some Predefined functions whose purpose is to provide applications and developers with the ability to access a set of routines based on a piece of software or hardware without having to access the source code or understand the details of the inner workings.

It should be noted that API has its specific purpose, and we should know what it does. What should be entered when accessing the API. What should you get after accessing the API.

When starting to design the API, we should pay attention to these 8 points

The subsequent development plan will revolve around this.

1.Restful design principles

2.API naming
3.API security
4.API return data
5.Picture processing
6.Return Prompt information
7. Online API test document
8. When the app starts, call an initialization API to obtain the necessary information

Develop API with laravel

Just when I was worried about whether to start learning from scratch, I found this plug-in dingo/api, so let’s install it now!

First of all, it must be downloaded correctly
Add the following content to the newly installed laravel composer.json

Then open cmd and execute

composer update

Add

App\Providers\OAuthServiceProvider::class,
Dingo\Api\Provider\LaravelServiceProvider::class,
LucaDegasperi\OAuth2Server\Storage\FluentStorageServiceProvider::class,
LucaDegasperi\OAuth2Server\OAuth2ServerServiceProvider::class,
to providers in config/app.php and add

'Authorizer' => LucaDegasperi\OAuth2Server\Facades\Authorizer::class,
to aliases to modify app/ The content in the 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 new service provider. Create a new OAuthServiceProvider.php file under app/Providers with the following content

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 it Add relevant routes to routes.php

//Get access_token
Route::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 with the following contents

//BaseController
namespace App\Http\Controllers;
 
use Dingo\Api\Routing\Helpers;
use Illuminate\Routing\Controller;
 
class BaseController extends Controller
{
  use Helpers;
}
 
//UsersController
namespace 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/ with the following content

##
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 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');
Then it’s time to happily test. The APIs to be tested here are


Add a new user

http: //localhost/register

Read all user information

http://localhost/api/users

Return only the information with user id 4

http://localhost/api/users/4

Get access_token

http://localhost/oauth/access_token

Use the token value to get the time, the token value is correct To return the correct value

http://localhost/api/time

Open PostMan



For more laravel framework technical articles, please visit laraveltutorial!

The above is the detailed content of Making API interface based on laravel. For more information, please follow other related articles on the PHP Chinese website!

Statement:
This article is reproduced at:jb51.net. If there is any infringement, please contact admin@php.cn delete