详解Laravel制作API接口
需要注意的是: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.作者投稿可能会经我们编辑修改或补充。