Maison  >  Article  >  cadre php  >  Créer une interface API basée sur Laravel

Créer une interface API basée sur Laravel

L
Lavant
2020-05-28 16:03:296700parcourir

Créer une interface API basée sur Laravel

À propos de l'API

API (Application Programming Interface, Application Programming Interface) en sont quelques-uns Fonctions prédéfinies dont le but est de fournir aux applications et aux développeurs la possibilité d'accéder à un ensemble de routines basées sur un logiciel ou un matériel sans avoir à accéder au code source ou à comprendre les détails du fonctionnement interne.
Il convient de noter que l'API a son objectif spécifique, et nous devrions savoir ce qu'elle fait. Ce qui doit être saisi lors de l'accès à l'API. Que devriez-vous obtenir après avoir accédé à l'API.

Lorsque nous commençons à concevoir l'API, nous devons prêter attention à ces 8 points
Le plan de développement ultérieur tournera autour de cela.

1. Principes de conception reposants
2. Dénomination de l'API
3. Sécurité de l'API
4. Données de retour de l'API
5. Traitement des images
6. Informations d'invite de retour
7. Documentation de test de l'API en ligne
8. Lorsque l'application démarre, appelez une API d'initialisation pour obtenir les informations nécessaires

Développer une API avec Laravel

Juste au moment où je me demandais si je devais commencer à apprendre à partir de zéro, j'ai trouvé ce plug-in dingo/api, alors installons-le maintenant !
Tout d'abord, il doit être téléchargé correctement
Ajoutez le contenu suivant au laravel composer.json nouvellement installé

Puis ouvrez cmd et exécutez

composer update

Ajoutez

App\Providers\OAuthServiceProvider::class,
Dingo\Api\Provider\LaravelServiceProvider::class,
LucaDegasperi\OAuth2Server\Storage\FluentStorageServiceProvider::class,
LucaDegasperi\OAuth2Server\OAuth2ServerServiceProvider::class,

aux fournisseurs dans config/app.php et ajoutez

'Authorizer' => LucaDegasperi\OAuth2Server\Facades\Authorizer::class,

aux alias pour modifier l'application / Contenu dans le fichier Http/Kernel.php

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,
];

puis exécutez

php artisan supplier:publier

php artisan migrate

Ajouter ces configurations dans le fichier .env

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

Modifier le fichier appconfigoauth2.php

'grant_types' => [
  'password' => [
    'class' => 'League\OAuth2\Server\Grant\PasswordGrant',
    'access_token_ttl' => 604800,
    'callback' => '\App\Http\Controllers\Auth\PasswordGrantVerifier@verify',
  ],
],

Créez un nouveau fournisseur de services. Créez un nouveau fichier OAuthServiceProvider.php sous app/Providers avec le contenu suivant :

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()
  {
    //
  }
}

Ensuite, ouvrez routes.php et ajoutez les routes associées

//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())];
  });
});

Créez respectivement BaseController.php et UsersController.php avec le contenu suivant

//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());
  }
}

Ensuite, créez PasswordGrantVerifier.php sous app/Http/Controllers/Auth/ avec le contenu suivant

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;
  }
}

Ouvrez le oauth_client de la base de données et ajoutez une nouvelle donnée client

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');

Ensuite, il est temps de s'amuser en testant. Les API à tester ici sont

Ajouter une. nouvel utilisateur

http://localhost/register

Lire toutes les informations utilisateur

http://localhost/api/users

Renvoyer uniquement les informations avec identifiant utilisateur 4

http:/ /localhost/api/users/4

Obtenir access_token

http://localhost/oauth/access_token

Utiliser la valeur du jeton pour obtenir l'heure. Ce n'est que lorsque la valeur du jeton est correcte que la valeur correcte peut être renvoyée

http://localhost/api/time

Open PostMan


Pour plus d'articles techniques sur le framework Laravel, veuillez visiter le tutoriel laravel !

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer