摘要:雖然這個(gè)方案的目標(biāo)是盡可能保持靈活性,但它仍然不能涵蓋所有情況并解決所有問題。這個(gè)是調(diào)度器的,并提供了一些好用的輔助方法。如果有什么問題或者文章有哪些錯(cuò)誤,請(qǐng)?jiān)谠u(píng)論區(qū)回復(fù),及時(shí)阻止我誤導(dǎo)他人。
基于 https://laravel-china.org/doc... 文檔更簡(jiǎn)潔的描述Dingo,直戳重點(diǎn),注重實(shí)踐概述
Dingo API幫助您輕松快速地構(gòu)建自己的API。雖然這個(gè)方案的目標(biāo)是盡可能保持靈活性,但它仍然不能涵蓋所有情況并解決所有問題。
安裝將以下代碼加入到composer.json中,并執(zhí)行composer update 或 composer install
"require": { "dingo/api": "2.0.0-alpha1" }Laravel
發(fā)布配置文件,執(zhí)行此命令后會(huì)在config目錄下生成api.php配置文件
php artisan vendor:publish --provider="DingoApiProviderLaravelServiceProvider" LumenLumen
如果是你使用的lumen,因lumen沒有vendor命令,請(qǐng)打開 bootstrap/app.php 并注冊(cè)服務(wù)提供者:
$app->register(DingoApiProviderLumenServiceProvider::class);Facade
API 自帶了兩個(gè) Facade,你可以酌情使用。
DingoApiFacadeAPI
這個(gè)是調(diào)度器的 Facade ,并提供了一些好用的輔助方法。
DingoApiFacadeRoute
你可以使用這個(gè) Facade 來獲取 API 的當(dāng)前路由、請(qǐng)求、檢查當(dāng)前路由的名稱等。
你可以在config/app.php aliases數(shù)組內(nèi)注冊(cè)Facade
"aliases" => [ ... "API" => DingoApiFacadeAPI::class, "ApiRoute" => DingoApiFacadeRoute::class, ],配置
在.env文件中配置你的Dingo API
API_STANDARDS_TREE
API_SUBTYPE
API_PREFIX
API_VERSION
API_NAME
API_CONDITIONAL_REQUEST
API_STRICT
API_DEBUG
API_DEFAULT_FORMAT
API_STANDARDS_TREEStandards Tree 標(biāo)準(zhǔn)樹
未注冊(cè)的樹(x)主要表示本地和私有環(huán)境
私有樹(prs)主要表示沒有商業(yè)發(fā)布的項(xiàng)目
供應(yīng)商樹(vnd)主要表示公開發(fā)布的項(xiàng)目
是一種概念上的東西,類似與git的分支,如果正常開發(fā)就按照 x,prs,vnd 的描述來填寫即可。
API_SUBTYPE在請(qǐng)求header中需要用到他
API_PREFIX地址的前綴,如果不需要請(qǐng)?zhí)顚?"/"
API_VERSION接口的版本,填寫后是默認(rèn)訪問的版本
API_NAME接口的名稱,用于生成api文檔,其他地方不使用
API_CONDITIONAL_REQUEST條件請(qǐng)求默認(rèn)為開啟狀態(tài),這有利于客戶端的緩存機(jī)制在可能的情況下緩存 API 請(qǐng)求。API_STRICT
強(qiáng)制每次請(qǐng)求必須帶版本,既
Accept:application/vnd.{API_SUBTYPE}.v2+jsonAPI_DEBUG
是否開啟調(diào)試,開啟后訪問api會(huì)看到
API_DEFAULT_FORMAT返回的類型,一般都是json
一個(gè)栗子API_STANDARDS_TREE=vnd API_SUBTYPE=catering API_PREFIX=/ API_VERSION=v1 API_NAME="My API" API_CONDITIONAL_REQUEST=false API_STRICT=false API_DEBUG=true API_DEFAULT_FORMAT=json使用
這里與實(shí)際業(yè)務(wù)結(jié)合來講解表結(jié)構(gòu) member
CREATE TABLE `member` ( `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, `tel` bigint(20) DEFAULT NULL COMMENT "手機(jī)號(hào)碼", `password` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT "登錄密碼", `status` tinyint(4) NOT NULL DEFAULT "0" COMMENT "賬號(hào)狀態(tài) 0:正常", `created_at` timestamp NULL DEFAULT NULL, `updated_at` timestamp NULL DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `member_tel_unique` (`tel`), KEY `member_tel_status_index` (`tel`,`status`) ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;member_data
CREATE TABLE `member_data` ( `member_id` bigint(20) NOT NULL COMMENT "用戶編碼", `sex` enum("0","1","2") COLLATE utf8mb4_unicode_ci NOT NULL COMMENT "性別 0=>女生 1=>男生 2=>未知", `nick_name` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT "姓名/昵稱", `img` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT "用戶頭像", `created_at` timestamp NULL DEFAULT NULL, `updated_at` timestamp NULL DEFAULT NULL, UNIQUE KEY `member_data_member_id_unique` (`member_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;新建一個(gè)路由
$api = app ("DingoApiRoutingRouter"); $api->post ("user/register", "AppApiControllersUserController@register"); });創(chuàng)建自定義響應(yīng)
200, "data" => $data, ]; } public static function error($message = "") { return [ "status_code" => 0, "message" => $message, ]; } public static function return($statusCode, $message, $data = []) { return [ "status_code" => $statusCode, "message" => $message, "data" => $data, ]; } }創(chuàng)建控制器
request = $request; $this->userService = $userService; } public function register() { $result = $this->userService->register ($this->request->all ()); if ($result["status_code"] == 200) { return $this->response->array (Response::return (200, "注冊(cè)成功", [ "user_id" => $result["data"], ])); } return $this->response->error ($result["message"], 500); } }創(chuàng)建服務(wù)
member = $member; } public function register($data) { try { return Response::success ((new CreateUser())->execute ($data)); } catch (Exception $e) { return Response::error ($e->getMessage ()); } } }創(chuàng)建動(dòng)作
tel = $data["tel"]; $member->password = md5 ($data["password"]); $result = $member->save (); if (!$result) { throw new Exception("注冊(cè)失敗"); } $memberData = new MemberData(); $memberData->member_id = $member->id; $memberData->sex = "2"; $memberData->nick_name = ""; $memberData->img = ""; $memberData->save (); return $member->id; } }請(qǐng)求
"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 Content-Disposition: form-data; name="tel" 18510362698 -----011000010111000001101001 Content-Disposition: form-data; name="password" zjk1221 -----011000010111000001101001--", CURLOPT_HTTPHEADER => array( "accept: application/vnd.catering.v1+json", "cache-control: no-cache", "content-type: multipart/form-data; boundary=---011000010111000001101001", "postman-token: e7cf665f-3698-217a-cd71-35c3a44f42bc" ), )); $response = curl_exec($curl); $err = curl_error($curl); curl_close($curl); if ($err) { echo "cURL Error #:" . $err; } else { echo $response; }疑難雜癥
列出一些常見問題及解決方案
版本區(qū)分后如何訪問API_VERSION 設(shè)置的版本只是默認(rèn)訪問版本,如果想訪問其他版本,需在header內(nèi)添加
Accept:application/vnd.{API_SUBTYPE}.v2+json不想添加前綴怎么辦
API_PREFIX=/
API_PREFIX不能為空,必須填寫內(nèi)容,那理所當(dāng)然的/一定是正確的
致謝感謝你看到這里,以上為個(gè)人研究開發(fā)的總結(jié)以及代碼,如果可以幫到你,我很高興。如果有什么問題或者文章有哪些錯(cuò)誤,請(qǐng)?jiān)谠u(píng)論區(qū)回復(fù),及時(shí)阻止我誤導(dǎo)他人。謝謝
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/28960.html
摘要:我的博客中文文檔中使用輔助文章參考這篇文章基本就能搭建出環(huán)境,我使用的版本跟他一樣,不知道別的版本有啥大的區(qū)別,但是網(wǎng)上找的其他一些文章使用的是舊的版本,封裝的東西路徑可能不一樣,可能會(huì)保錯(cuò),有些文檔還說要手動(dòng)添加和,其實(shí)新版本不需要。 我的github博客:https://zgxxx.github.io/ dingo api 中文文檔: https://www.bookstack....
摘要:快速使用安裝添加服務(wù)提供者打開向數(shù)組中添加其他的服務(wù)提供者添加打開向數(shù)組中添加和其他的添加自定義配置文件執(zhí)行命令結(jié)果配置你的文件,把下面的內(nèi)容添加你的文件里到這里,基礎(chǔ)配置基本完事了,下面創(chuàng)建一個(gè)來看看效果創(chuàng)建到你的路由文件里面,把下面 快速使用 安裝 composer require dingo/api:1.0.x@dev 添加dingo服務(wù)提供者 打開 config/app.php...
摘要:源碼使用本文使用的數(shù)據(jù)庫(kù)與基礎(chǔ)篇相同,故不再重復(fù)說明。使用的用法與之前的自定義用法類似,甚至更加簡(jiǎn)單。首先定義路由如果要查看路由,需要使用創(chuàng)建控制器需要使用這個(gè)。 源碼 使用 Dingo Api 本文使用的數(shù)據(jù)庫(kù)與基礎(chǔ)篇相同,故不再重復(fù)說明。 初始化 安裝 $ composer require dingo/api:1.0.x@dev 注冊(cè) /config/app.php provide...
摘要:在最近的開發(fā)開發(fā)項(xiàng)目中,我使用了這個(gè)第三方庫(kù)。是個(gè)很強(qiáng)大的庫(kù),但在開發(fā)的過程中,需要自定義響應(yīng)字段。剛開始使用時(shí),返回如下手機(jī)號(hào)格式不正確這是輸入字段驗(yàn)證錯(cuò)誤時(shí),返回的結(jié)果。尤其是,需要對(duì)每一個(gè)對(duì)象進(jìn)行新建,然后序列化。 在最近的開發(fā)開發(fā)項(xiàng)目中,我使用了Dingo/Api這個(gè)第三方Api庫(kù)。Dingo是個(gè)很強(qiáng)大的Api庫(kù), 但在開發(fā)的過程中,需要自定義響應(yīng)字段。 剛開始使用Ding/A...
摘要:背景在近期使用處理接口時(shí),發(fā)現(xiàn)本身中無法捕獲異常。后來查閱資料發(fā)現(xiàn),接管了請(qǐng)求的異常處理。導(dǎo)致無法自定義錯(cuò)誤返回,很是頭疼。最后在的找到了處理方法。 背景 在近期使用Dingo api處理接口時(shí),發(fā)現(xiàn)laravel本身appExceptionsHandler中無法捕獲異常。 后來查閱資料發(fā)現(xiàn),Dingo api接管了api請(qǐng)求的異常處理。導(dǎo)致無法自定義錯(cuò)誤返回,很是頭疼。 最后在di...
閱讀 2229·2019-08-30 15:53
閱讀 2457·2019-08-30 12:54
閱讀 1206·2019-08-29 16:09
閱讀 731·2019-08-29 12:14
閱讀 760·2019-08-26 10:33
閱讀 2485·2019-08-23 18:36
閱讀 2961·2019-08-23 18:30
閱讀 2122·2019-08-22 17:09