当前位置: 首页 > 后端技术 > PHP

五分钟上手DingoAPI

时间:2023-03-30 01:39:54 PHP

基于https://laravel-china.org/doc...文档对Dingo的描述更加简洁,直击要点,着重实用概述DingoAPI帮助你构建自己的轻松快速地拥有自己的API。虽然该方案旨在尽可能灵活,但它仍然无法覆盖所有情况并解决所有问题。安装在composer.json中添加如下代码,执行composerupdate或composerinstall"require":{"dingo/api":"2.0.0-alpha1"}Laravel发布配置文件。执行这条命令后,会在config目录下生成phpartisanvendor:publish--provider="Dingo\Api\Provider\LaravelServiceProvider"LumenLumen下的api.php配置文件,如果使用lumen,因为lumen没有vendor命令,请打开bootstrap/app.php并注册服务提供者Author:$app->register(Dingo\Api\Provider\LumenServiceProvider::class);FacadeAPI自带两个门面,你可以酌情使用。Dingo\Api\Facade\API是调度器的Facade,提供了一些有用的辅助方法。Dingo\Api\Facade\Route你可以通过这个Facade获取API的当前路由,请求,查看当前路由的名称等。你可以在config/app.php别名数组中注册Facade'aliases'=>[...'API'=>Dingo\Api\Facade\API::class,'ApiRoute'=>Dingo\Api\Facade\Route::class,],configureConfigureyourDingoAPIin.envfileAPI_STANDARDS_TREEAPI_SUBTYPEAPI_PREFIXAPI_VERSIONAPI_NAMEAPI_CONDITIONAL_REQUESTAPI_STRICTAPI_DEBUGAPI_DEFAULT_FORMATAPI_STANDARDS_TREEStandardsTree标准树Unregisteredtrees(x)主要表示本地和私有环境releasedproject是一个概念性的东西,类似于git的分支。如果正常开发,按照x、prs、vnd的描述填写即可。API_SUBTYPE需要在请求头中使用其API_PREFIX地址的前缀。如果不是,请填写API_VERSION接口的版本。填写后为默认接入版本API_NAME接口名称,用于生成api文档。API_CONDITIONAL_REQUEST在其他地方没有使用条件请求是默认启用的,这有利于客户端的缓存机制在可能的情况下缓存API请求。API_STRICT强制每个请求有版本,即是否开启Accept:application/vnd.{API_SUBTYPE}.v2+jsonAPI_DEBUG调试。启用后访问api会看到API_DEFAULT_FORMAT返回的type,一般是json的栗子这个要结合实际业务来解释表结构memberCREATETABLE`member`(`id`bigint(20)unsignedNOTNULLAUTO_INCREMENT,`tel`bigint(20)DEFAULTNULLCOMMENT'手机号码',`password`varchar(255)COLLATEutf8mb4_unicode_ciDEFAULTNULLCOMMENT'loginpassword',`status`tinyint(4)NOTNULLDEFAULT'0'COMMENT'accountstatus0:normal',`created_at`timestampNULLDEFAULTNULL,`updated_at`timestampNULLDEFAULTNULL,PRIMARYKEY(`id`),UNIQUEKEY`member_tel_unique`(`tel`),KEY`member_tel_status_index`(`tel`,`status`))ENGINE=InnoDBAUTO_INCREMENT=4DEFAULTCHARSET=utf8mb4COLLATE=utf8mb4_unicode_ci;member_dataCREATETABLE`member_data`(`我mber_id`bigint(20)NOTNULLCOMMENT'usercode',`sex`enum('0','1','2')COLLATEutf8mb4_unicode_ciNOTNULLCOMMENT'gender0=>girl1=>boy2=>unknown',`nick_name`varchar(255)COLLATEutf8mb4_unicode_ciNOTNULLCOMMENT'姓名/nickname',`img`varchar(255)COLLATEutf8mb4_unicode_ciNOTNULLCOMMENT'useravatar',`created_at`timestampNULLDEFAULTNULL,`updated_at`timestampNULLDEFAULTNULL,UNIQUEKEY`member_data_member_id_unique`(`memberEN_id=`)DEFAULTCHARSET=utf8mb4整理=utf8mb4_unicode_ci;创建新路由$api=app('Dingo\Api\Routing\Router');$api->post('用户/注册','App\Api\Controllers\UserController@register');});创建自定义响应200,'data'=>$data,];}publicstaticfunctionerror($message=''){return['status_code'=>0,'消息'=>$消息,];}publicstaticfunctionreturn($statusCode,$message,$data=[]){return['status_code'=>$statusCode,'message'=>$message,'data'=>$data,];}}创建控制器request=$request;$this->userService=$userService;}publicfunctionregister(){$result=$this->userService->register($this->request->全部());if($result['status_code']==200){return$this->response->array(Response::return(200,'登记成功',['user_id'=>$result['data'],]));}返回$this->response->error($result['message'],500);}}创建服务member=$member;}publicfunctionregister($data){try{returnResponse::success((newCreateUser())->execute($data));}catch(\Exception$e){returnResponse::error($e->getMessage());}}}创建活动tel=$data['tel'];$member->password=md5($data['password']);$result=$member->保存();if(!$result){thrownew\Exception('注册失败');}$memberData=newMemberData();$memberData->member_id=$member->id;$memberData->sex="2";$memberData->nick_name="";$memberData->img="";$memberData->保存();返回$成员->id;}}请请求"http://api.c.com/user/register",CURLOPT_RETURNTRANSFER=>true,CURLOPT_ENCODING=>"",CURLOPT_MAXREDIRS=>10,CURLOPT_TIMEOUT=>30,CURLOPT_HTTP_VERSION=>CURL_HTTP_VERSION_1_1,CURLOPT_CUSTOMREQUEST=>"POST",CURLOPT_POSTFIELDS=>"-----011000010111000001101001\r\nContent-Disposition:form-data;name=\"tel\"\r\n\r\n18510362698\r\n-----011000010111000001101001\r\nContent-Disposition:form-data;name=\"password\"\r\n\r\nzjk1221\r\n-----011000010111000001101001--",CURLOPT_HTTPHEADER=>array(“接受:application/vnd.catering.v1+json”,“缓存控制:无缓存”,“内容类型:多部分/表单数据;边界=---011000010111000001101001”,“邮递员令牌:e7cf665f-3698-217a-cd71-35c3a44f42bc")));$response=curl_exec($curl);$err=curl_error($curl);curl_close($curl);if($err){echo"cURL错误#:".$err;}else{echo$response;}杂病罗列一些常见问题及解决方法这样区分之后,如何访问API_VERSION设置的版本只是默认访问的版本。如果要访问其他版本,需要在header中添加Accept:application/vnd.{API_SUBTYPE}.v2+json。不想加前缀怎么办API_PREFIX=/API_PREFIX不能为空,内容必须填写,当然/必须是正确的。感谢您阅读此处。以上是个人研发和代码的总结。如果能帮到你,我很高兴。文中如有问题或错误,请在评论区回复,及时阻止我误导他人。谢谢