API-Schnittstelle basierend auf Laravel erstellen
Über API
API (Application Programming Interface, Anwendungsprogrammierschnittstelle) sind einige davon Vordefinierte Funktionen, deren Zweck darin besteht, Anwendungen und Entwicklern die Möglichkeit zu geben, auf eine Reihe von Routinen basierend auf einer Software oder Hardware zuzugreifen, ohne auf den Quellcode zugreifen oder die Details des Innenlebens verstehen zu müssen.
Es sollte beachtet werden, dass die API ihren spezifischen Zweck hat und wir wissen sollten, was sie tut. Was sollte beim Zugriff auf die API eingegeben werden? Was sollten Sie nach dem Zugriff auf die API erhalten?
Wenn wir mit dem Design der API beginnen, sollten wir auf diese 8 Punkte achten
Der nachfolgende Entwicklungsplan wird sich darum drehen.
1. Restful-Design-Prinzipien
2. API-Benennung
3. API-Sicherheit
4. API-Rückgabedaten
5. Bildverarbeitung
6. Informationen zur Rückgabeaufforderung
7. Online-API-Testdokumentation
8. Rufen Sie beim Start der App eine Initialisierungs-API auf, um die erforderlichen Informationen zu erhalten
API mit Laravel entwickeln
Gerade als ich darüber nachdachte, ob ich von Grund auf lernen sollte, habe ich dieses Plug-in Dingo/API gefunden, also lass es uns jetzt installieren!
Zuerst muss es korrekt heruntergeladen werden
Fügen Sie den folgenden Inhalt zur neu installierten Laravel Composer.json hinzu
Öffnen Sie dann cmd und führen Sie
Composer-Update
Fügen SieApp\Providers\OAuthServiceProvider::class, Dingo\Api\Provider\LaravelServiceProvider::class, LucaDegasperi\OAuth2Server\Storage\FluentStorageServiceProvider::class, LucaDegasperi\OAuth2Server\OAuth2ServerServiceProvider::class,zu Anbietern in config/app.php hinzu und
'Authorizer' => LucaDegasperi\OAuth2Server\Facades\Authorizer::class,zu Aliasen, um die App zu ändern / Inhalt in der Http/Kernel.php-Datei
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, ];und dann ausführen php artisan seller:publish php artisan migrateFügen Sie diese Konfigurationen in der .env-Datei hinzu
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Ändern Sie die Datei appconfigoauth2.php
'grant_types' => [ 'password' => [ 'class' => 'League\OAuth2\Server\Grant\PasswordGrant', 'access_token_ttl' => 604800, 'callback' => '\App\Http\Controllers\Auth\PasswordGrantVerifier@verify', ], ],Erstellen Sie unter app/Providers eine neue Datei OAuthServiceProvider.php mit folgendem Inhalt:
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() { // } }Öffnen Sie dann „routes.php“ und fügen Sie „Verwandte Routen“ hinzu
//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())]; }); });Erstellen Sie BaseController.php bzw. UsersController.php mit folgendem Inhalt
//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()); } }Dann erstellen Sie PasswordGrantVerifier.php unter app/Http/Controllers/Auth/ mit folgendem Inhalt
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; } }Öffnen Sie die oauth_client-Tabelle der Datenbank und fügen Sie neue Client-Daten hinzu
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');Dann ist es Zeit, Spaß beim Testen zu haben neuer Benutzer
http://localhost/ registrieren
Alle Benutzerinformationen lesen
http://localhost/api/users
Informationen nur mit zurückgeben Benutzer-ID 4
http://localhost/api/users/4
Access_token abrufen
http://localhost/oauth/access_token
Verwenden Nur wenn der Token-Wert korrekt ist, kann der korrekte Wert zurückgegeben werden
http://localhost/api/time
Open PostMan
Weitere technische Artikel zum Laravel-Framework finden Sie im LaravelTutorial!