源码DingoApi的使用本文使用的数据库与基础篇相同,不再赘述。初始安装$composerrequiredingo/api:1.0.x@devregistration/config/app.php'providers'=>[Dingo\Api\Provider\LaravelServiceProvider::class,],为了能够自定义配置,首先需要执行$phpartisanvendor:publish--provider="Dingo\Api\Provider\LaravelServiceProvider"复制文件[/vendor/dingo/api/config/api.php]到[/config/api.php]发布完成.可以看更多创建一个api.php配置文件后,我们可以在.env中进行配置,一些常用的配置项:/.envAPI_STANDARDS_TREE=vnd#公共和商业项目使用vndAPI_SUBTYPE=api-demo#项目缩写API_PREFIX=api#prefixAPI_VERSION=v1#不提供版本时使用的版本号API_NAME="LaravelApiDemo"#API_STRICT=false仅在使用API??Blueprint命令生成文档时使用#严格模式需要客户端改为发送Accept头默认的配置文件中指定的版本,这意味着你不能通过网络浏览器浏览APIAPI_DEFAULT_FORMAT=jsonAPI_DEBUG=true#开启调试模式创建一个基本端点(路由中的名称api)测试是否配置成功/routes/api.php$api=app('Dingo\Api\Routing\Router');$api->version('v1',function($api){$api->get('test',function(){return'It没问题';});});访问/api/test并返回就可以了。Dingo的用法与之前的自定义api用法类似,甚至更简单。首先定义路由/routes/api.php$api=app('Dingo\Api\Routing\Router');$api->version('v1',function($api){$api->group(['namespace'=>'App\Api\Controllers'],function($api){$api->resource('课程','LessonController');});});如果你想查看路线,你需要使用$phpartisanapi:routescreatescontrollers-需要Helpers特性。/app/Api/Controllers/LessonController.phpcollection($lessons,newLessonTransformer());}publicfunctionshow($id){//虽然我们返回的不是json,但是dingo会自动转换returnLesson::findOrFail($id);}}创建相应的LessonTransformer/app/Api/Transformers/LessonTransformer.php$lesson['title'],'content'=>$lesson['body'],'is_free'=>(bool)$lesson['free']];}}访问api/lessons/3,结果如下,可以看到Dingo自动将响应数据转成json,但是我们还是需要格式化publicfunctionshow($id){$lesson=Lesson::查找失败($id);return$this->response->item($lesson,newLessonTransformer());}这样就可以得到格式化后的数据类似于Laravel,也可以使用分页publicfunctionindex(){$lessons=Lesson::paginate(15);return$this->response->paginator($lessons,newLessonTransformer());}会返回15条信息和分页信息,当请求出现错误时,Dingo会自动帮我们处理。您还可以自定义公共功能show($id){$lesson=Lesson::find($id);if(!$lesson){return$this->response->errorNotFound("wrongid");}return$this->response->item($lesson,newLessonTransformer());}结果如下结合简单的认证,我们可以添加内置的Api认证功能,比如HTTP基本认证首先,创建一个测试用户$phpartisantinker>>>$user=new\App\User();>>>$user->name="zen">>>$user->email="ihuangmx@qq.com">>>$user->password=bcrypt("123456")>>>$user->save()=>true在controller中添加Laravel自带的中间件publicfunction__construct(){$this->middleware('auth.basic');}现在访问时会提示输入用户名和密码,其中用户名指邮箱
