Heim  >  Artikel  >  PHP-Framework  >  Erstellen einer API-Schnittstelle basierend auf Laravel

Erstellen einer API-Schnittstelle basierend auf Laravel

L
Lnach vorne
2020-05-28 16:03:296542Durchsuche

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 Sie

App\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 migrate

Fü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!

Das obige ist der detaillierte Inhalt vonErstellen einer API-Schnittstelle basierend auf Laravel. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:jb51.net. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen