摘要:雖然這個方案的目標是盡可能保持靈活性,但它仍然不能涵蓋所有情況并解決所有問題。這個是調度器的,并提供了一些好用的輔助方法。如果有什么問題或者文章有哪些錯誤,請在評論區回復,及時阻止我誤導他人。
基于 https://laravel-china.org/doc... 文檔更簡潔的描述Dingo,直戳重點,注重實踐概述
Dingo API幫助您輕松快速地構建自己的API。雖然這個方案的目標是盡可能保持靈活性,但它仍然不能涵蓋所有情況并解決所有問題。
安裝將以下代碼加入到composer.json中,并執行composer update 或 composer install
"require": { "dingo/api": "2.0.0-alpha1" }Laravel
發布配置文件,執行此命令后會在config目錄下生成api.php配置文件
php artisan vendor:publish --provider="DingoApiProviderLaravelServiceProvider" LumenLumen
如果是你使用的lumen,因lumen沒有vendor命令,請打開 bootstrap/app.php 并注冊服務提供者:
$app->register(DingoApiProviderLumenServiceProvider::class);Facade
API 自帶了兩個 Facade,你可以酌情使用。
DingoApiFacadeAPI
這個是調度器的 Facade ,并提供了一些好用的輔助方法。
DingoApiFacadeRoute
你可以使用這個 Facade 來獲取 API 的當前路由、請求、檢查當前路由的名稱等。
你可以在config/app.php aliases數組內注冊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 標準樹
未注冊的樹(x)主要表示本地和私有環境
私有樹(prs)主要表示沒有商業發布的項目
供應商樹(vnd)主要表示公開發布的項目
是一種概念上的東西,類似與git的分支,如果正常開發就按照 x,prs,vnd 的描述來填寫即可。
API_SUBTYPE在請求header中需要用到他
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返回的類型,一般都是json
一個栗子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使用
這里與實際業務結合來講解表結構 member
CREATE TABLE `member` ( `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, `tel` bigint(20) DEFAULT NULL COMMENT "手機號碼", `password` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT "登錄密碼", `status` tinyint(4) NOT NULL DEFAULT "0" COMMENT "賬號狀態 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;新建一個路由
$api = app ("DingoApiRoutingRouter"); $api->post ("user/register", "AppApiControllersUserController@register"); });創建自定義響應
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, ]; } }創建控制器
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, "注冊成功", [ "user_id" => $result["data"], ])); } return $this->response->error ($result["message"], 500); } }創建服務
member = $member; } public function register($data) { try { return Response::success ((new CreateUser())->execute ($data)); } catch (Exception $e) { return Response::error ($e->getMessage ()); } } }創建動作
tel = $data["tel"]; $member->password = md5 ($data["password"]); $result = $member->save (); if (!$result) { throw new Exception("注冊失敗"); } $memberData = new MemberData(); $memberData->member_id = $member->id; $memberData->sex = "2"; $memberData->nick_name = ""; $memberData->img = ""; $memberData->save (); return $member->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 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; }疑難雜癥
列出一些常見問題及解決方案
版本區分后如何訪問API_VERSION 設置的版本只是默認訪問版本,如果想訪問其他版本,需在header內添加
Accept:application/vnd.{API_SUBTYPE}.v2+json不想添加前綴怎么辦
API_PREFIX=/
API_PREFIX不能為空,必須填寫內容,那理所當然的/一定是正確的
致謝感謝你看到這里,以上為個人研究開發的總結以及代碼,如果可以幫到你,我很高興。如果有什么問題或者文章有哪些錯誤,請在評論區回復,及時阻止我誤導他人。謝謝
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/28960.html
摘要:我的博客中文文檔中使用輔助文章參考這篇文章基本就能搭建出環境,我使用的版本跟他一樣,不知道別的版本有啥大的區別,但是網上找的其他一些文章使用的是舊的版本,封裝的東西路徑可能不一樣,可能會保錯,有些文檔還說要手動添加和,其實新版本不需要。 我的github博客:https://zgxxx.github.io/ dingo api 中文文檔: https://www.bookstack....
摘要:快速使用安裝添加服務提供者打開向數組中添加其他的服務提供者添加打開向數組中添加和其他的添加自定義配置文件執行命令結果配置你的文件,把下面的內容添加你的文件里到這里,基礎配置基本完事了,下面創建一個來看看效果創建到你的路由文件里面,把下面 快速使用 安裝 composer require dingo/api:1.0.x@dev 添加dingo服務提供者 打開 config/app.php...
摘要:源碼使用本文使用的數據庫與基礎篇相同,故不再重復說明。使用的用法與之前的自定義用法類似,甚至更加簡單。首先定義路由如果要查看路由,需要使用創建控制器需要使用這個。 源碼 使用 Dingo Api 本文使用的數據庫與基礎篇相同,故不再重復說明。 初始化 安裝 $ composer require dingo/api:1.0.x@dev 注冊 /config/app.php provide...
摘要:在最近的開發開發項目中,我使用了這個第三方庫。是個很強大的庫,但在開發的過程中,需要自定義響應字段。剛開始使用時,返回如下手機號格式不正確這是輸入字段驗證錯誤時,返回的結果。尤其是,需要對每一個對象進行新建,然后序列化。 在最近的開發開發項目中,我使用了Dingo/Api這個第三方Api庫。Dingo是個很強大的Api庫, 但在開發的過程中,需要自定義響應字段。 剛開始使用Ding/A...
摘要:背景在近期使用處理接口時,發現本身中無法捕獲異常。后來查閱資料發現,接管了請求的異常處理。導致無法自定義錯誤返回,很是頭疼。最后在的找到了處理方法。 背景 在近期使用Dingo api處理接口時,發現laravel本身appExceptionsHandler中無法捕獲異常。 后來查閱資料發現,Dingo api接管了api請求的異常處理。導致無法自定義錯誤返回,很是頭疼。 最后在di...
閱讀 2222·2019-08-30 15:53
閱讀 2447·2019-08-30 12:54
閱讀 1194·2019-08-29 16:09
閱讀 726·2019-08-29 12:14
閱讀 750·2019-08-26 10:33
閱讀 2473·2019-08-23 18:36
閱讀 2956·2019-08-23 18:30
閱讀 2116·2019-08-22 17:09