详解Laravel制作API接口

吾爱主题 阅读:141 2021-11-18 14:42:00 评论:0

需要注意的是:API有它的具体用途,我们应该清楚它是干啥的。访问API的时候应该输入什么。访问过API过后应该得到什么。

在开始设计API时,我们应该注意这8点。后续的开发计划就围绕着这个进行了。

1.Restful设计原则

2.API的命名

3.API的安全性

4.API返回数据

5.图片的处理

6.返回的提示信息

7.在线API测试文档

8.在app启动时,调用一个初始化API获取必要的信息

用laravel开发API

就在我上愁着要不要从零开始学习的时候,找到了这个插件dingo/api那么现在就来安装吧!

首先一定是下载的没错

在新安装好的laravel的composer.json加入如下内容

然后打开cmd执行

composer update

在config/app.php中的providers里添加

App\Providers\OAuthServiceProvider::class,

Dingo\Api\Provider\LaravelServiceProvider::class,

LucaDegasperi\OAuth2Server\Storage\FluentStorageServiceProvider::class,

LucaDegasperi\OAuth2Server\OAuth2ServerServiceProvider::class,

在aliases里添加

?
1 'Authorizer' => LucaDegasperi\OAuth2Server\Facades\Authorizer:: class ,

修改app/Http/Kernel.php文件里的内容

?
1 2 3 4 5 6 7 8 9 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 , ];

然后执行

php artisan vendor:publish

php artisan migrate

在.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

修改app\config\oauth2.php文件

?
1 2 3 4 5 6 7 'grant_types' => [   'password' => [   'class' => 'League\OAuth2\Server\Grant\PasswordGrant' ,   'access_token_ttl' => 604800,   'callback' => '\App\Http\Controllers\Auth\PasswordGrantVerifier@verify' ,   ], ],

新建一个服务提供者,在app/Providers下新建OAuthServiceProvider.php文件内容如下

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 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()   {   //   } }

然后打开routes.php添加相关路由

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 //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())];   }); });

分别创建BaseController.php和UsersController.php内容如下

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 //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());   } }

随后在app/Http/Controllers/Auth/下创建PasswordGrantVerifier.php内容如下

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 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;   } }

打开数据库的oauth_client表新增一条client数据

?
1 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' );

随后的就是去愉快的测试了,这里要测试的API有

新增一个用户

http://localhost/register

读取所有用户信息

http://localhost/api/users

只返回用户id为4的信息

http://localhost/api/users/4

获取access_token

http://localhost/oauth/access_token

利用token值获得时间,token值正确才能返回正确值

http://localhost/api/time

打开PostMan

以上就是详解Laravel制作API接口的详细内容,更多关于Laravel制作API接口的资料请关注服务器之家其它相关文章!

原文链接:https://www.cnblogs.com/a609251438/p/13020906.html

可以去百度分享获取分享代码输入这里。
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

【腾讯云】云服务器产品特惠热卖中
搜索
标签列表
    关注我们

    了解等多精彩内容