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 !