zoukankan      html  css  js  c++  java
  • 基于laravel制作API接口

    基于laravel制作API接口

    关于API

    API(Application Programming Interface,应用程序编程接口)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。
    需要注意的是: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里添加

    AppProvidersOAuthServiceProvider::class,
    DingoApiProviderLaravelServiceProvider::class,
    LucaDegasperiOAuth2ServerStorageFluentStorageServiceProvider::class,
    LucaDegasperiOAuth2ServerOAuth2ServerServiceProvider::class, 
    

      

    在aliases里添加

    'Authorizer' => LucaDegasperiOAuth2ServerFacadesAuthorizer::class,
    

      

    修改app/Http/Kernel.php文件里的内容
    protected $middleware = [LucaDegasperiOAuth2ServerMiddlewareOAuthExceptionHandlerMiddleware::class,
    ];
    protected $routeMiddleware = [
     'oauth' => LucaDegasperiOAuth2ServerMiddlewareOAuthMiddleware::class,
     'oauth-user' => LucaDegasperiOAuth2ServerMiddlewareOAuthUserOwnerMiddleware::class,
     'oauth-client' => LucaDegasperiOAuth2ServerMiddlewareOAuthClientOwnerMiddleware::class,
     'check-authorization-params' => LucaDegasperiOAuth2ServerMiddlewareCheckAuthCodeRequestMiddleware::class,
     'csrf' => AppHttpMiddlewareVerifyCsrfToken::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
    

      

    修改appconfigoauth2.php文件

    'grant_types' => [
     'password' => [
     'class' => 'LeagueOAuth2ServerGrantPasswordGrant',
     'access_token_ttl' => 604800,
     'callback' => 'AppHttpControllersAuthPasswordGrantVerifier@verify',
     ],
    ],
    

      

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

    namespace AppProviders;
      
    use DingoApiAuthAuth;
    use DingoApiAuthProviderOAuth2;
    use IlluminateSupportServiceProvider;
      
    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添加相关路由

    //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 AppUser();
     $user->name="tester";
     $user->email="test@test.com";
     $user->password = IlluminateSupportFacadesHash::make("password");
     $user->save();
    });
    $api = app('DingoApiRoutingRouter');
      
    //Show user info via restful service.
    $api->version('v1', ['namespace' => 'AppHttpControllers'], 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内容如下

    //BaseController
    namespace AppHttpControllers;
      
    use DingoApiRoutingHelpers;
    use IlluminateRoutingController;
      
    class BaseController extends Controller
    {
     use Helpers;
    }
      
    //UsersController
    namespace AppHttpControllers;
      
    use AppUser;
    use AppHttpControllersController;
      
    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内容如下

    namespace AppHttpControllersAuth;
    use IlluminateSupportFacadesAuth;
      
    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数据

    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

    更多PHP内容请访问:

    腾讯T3-T4标准精品PHP架构师教程目录大全,只要你看完保证薪资上升一个台阶(持续更新)

  • 相关阅读:
    Test SLURM
    PGM_Foundations
    PGM-Introduction
    Functional Analysis-Metric Space
    Introduction to Machine Learning
    Time Series Analysis
    Solving Puzzles With HHT From a Engineering Perspective
    Docker-3:Data Volume
    Docker-2:network containers
    Docker-1
  • 原文地址:https://www.cnblogs.com/a609251438/p/13020906.html
Copyright © 2011-2022 走看看