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

Erstellen einer API-Schnittstelle basierend auf Laravel

L
Freigeben: 2020-05-30 14:24:51
nach vorne
6723 Leute haben es durchsucht

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,
Nach dem Login kopieren
zu Anbietern in config/app.php hinzu und

'Authorizer' => LucaDegasperi\OAuth2Server\Facades\Authorizer::class,
Nach dem Login kopieren
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,
];
Nach dem Login kopieren
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
Nach dem Login kopieren

Ä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',
  ],
],
Nach dem Login kopieren
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()
  {
    //
  }
}
Nach dem Login kopieren
Ö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())];
  });
});
Nach dem Login kopieren
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());
  }
}
Nach dem Login kopieren
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;
  }
}
Nach dem Login kopieren
Ö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');
Nach dem Login kopieren
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!

Verwandte Etiketten:
api
Quelle:jb51.net
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage