关于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里添加
1 2 3 4 | App\Providers\OAuthServiceProvider:: class ,
Dingo\Api\Provider\LaravelServiceProvider:: class ,
LucaDegasperi\OAuth2Server\Storage\FluentStorageServiceProvider:: class ,
LucaDegasperi\OAuth2Server\OAuth2ServerServiceProvider:: class ,
|
Salin selepas log masuk
在aliases里添加
1 | 'Authorizer' => LucaDegasperi\OAuth2Server\Facades\Authorizer:: class ,
|
Salin selepas log masuk
修改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 ,
];
|
Salin selepas log masuk
然后执行
php artisan vendor:publish
php artisan migrate
在.env文件里添加这些配置
1 2 3 4 5 6 7 8 9 | 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
|
Salin selepas log masuk
修改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',
],
],
|
Salin selepas log masuk
新建一个服务提供者,在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 ) {
});
$provider ->setClientResolver( function ( $id ) {
});
return $provider ;
});
}
public function register()
{
}
}
|
Salin selepas log masuk
然后打开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 | Route::post('oauth/access_token', function () {
return Response::json(Authorizer::issueAccessToken());
});
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');
$api ->version('v1', [' namespace ' => 'App\Http\Controllers'], function ( $api ) {
$api ->get('users', 'UsersController@index');
$api ->get('users/{id}', 'UsersController@show');
});
$api ->version('v1', ['middleware' => 'api.auth'] , function ( $api ) {
$api ->get('time', function () {
return ['now' => microtime(), ' date ' => date ('Y-M-D',time())];
});
});
|
Salin selepas log masuk
分别创建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 | namespace App\Http\Controllers;
use Dingo\Api\Routing\Helpers;
use Illuminate\Routing\Controller;
class BaseController extends Controller
{
use Helpers;
}
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());
}
}
|
Salin selepas log masuk
随后在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;
}
}
|
Salin selepas log masuk
打开数据库的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');
|
Salin selepas log masuk
随后的就是去愉快的测试了,这里要测试的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框架技术文章,请访问laravel教程!