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

Créer une interface API basée sur Laravel

L
Libérer: 2020-05-30 14:24:51
avant
6726 Les gens l'ont consulté

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,
Copier après la connexion

aux fournisseurs dans config/app.php et ajoutez

'Authorizer' => LucaDegasperi\OAuth2Server\Facades\Authorizer::class,
Copier après la connexion

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,
];
Copier après la connexion

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
Copier après la connexion

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',
  ],
],
Copier après la connexion

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()
  {
    //
  }
}
Copier après la connexion

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())];
  });
});
Copier après la connexion

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());
  }
}
Copier après la connexion

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;
  }
}
Copier après la connexion

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');
Copier après la connexion

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!

Étiquettes associées:
api
source:jb51.net
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal