日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

五分钟入门 Dingo API

發(fā)布時間:2023/12/15 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 五分钟入门 Dingo API 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

基于 https://laravel-china.org/doc... 文檔更簡潔的描述Dingo,直戳重點,注重實踐

概述

Dingo API幫助您輕松快速地構建自己的API。雖然這個方案的目標是盡可能保持靈活性,但它仍然不能涵蓋所有情況并解決所有問題。

安裝

將以下代碼加入到composer.json中,并執(zhí)行composer update 或 composer install

"require": {"dingo/api": "2.0.0-alpha1" }

Laravel

發(fā)布配置文件,執(zhí)行此命令后會在config目錄下生成api.php配置文件

php artisan vendor:publish --provider="Dingo\Api\Provider\LaravelServiceProvider" Lumen

Lumen

如果是你使用的lumen,因lumen沒有vendor命令,請打開 bootstrap/app.php 并注冊服務提供者:

$app->register(Dingo\Api\Provider\LumenServiceProvider::class);

Facade

API 自帶了兩個 Facade,你可以酌情使用。

Dingo\Api\Facade\API

這個是調度器的 Facade ,并提供了一些好用的輔助方法。

Dingo\Api\Facade\Route

你可以使用這個 Facade 來獲取 API 的當前路由、請求、檢查當前路由的名稱等。

你可以在config/app.php aliases數(shù)組內注冊Facade

'aliases' => [...'API' => Dingo\Api\Facade\API::class,'ApiRoute' => Dingo\Api\Facade\Route::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_TREE

Standards Tree 標準樹

  • 未注冊的樹(x)主要表示本地和私有環(huán)境
  • 私有樹(prs)主要表示沒有商業(yè)發(fā)布的項目
  • 供應商樹(vnd)主要表示公開發(fā)布的項目

是一種概念上的東西,類似與git的分支,如果正常開發(fā)就按照 x,prs,vnd 的描述來填寫即可。

API_SUBTYPE

在請求header中需要用到他

API_PREFIX

地址的前綴,如果不需要請?zhí)顚?'/'

API_VERSION

接口的版本,填寫后是默認訪問的版本

API_NAME

接口的名稱,用于生成api文檔,其他地方不使用

API_CONDITIONAL_REQUEST

條件請求默認為開啟狀態(tài),這有利于客戶端的緩存機制在可能的情況下緩存 API 請求。

API_STRICT

強制每次請求必須帶版本,既

Accept:application/vnd.{API_SUBTYPE}.v2+json

API_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

使用

這里與實際業(yè)務結合來講解

表結構

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 '賬號狀態(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;

新建一個路由

$api = app ('Dingo\Api\Routing\Router'); $api->post ('user/register', 'App\Api\Controllers\UserController@register'); });

創(chuàng)建自定義響應

<?phpnamespace App\Api;class Response{public static function success($data){return ['status_code' => 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)建控制器

<?phpnamespace App\Api\Controllers;use App\Api\DingoController;use App\Api\Response;use App\Api\Services\UserService;use Illuminate\Http\Request;class UserController extends DingoController{public $request;protected $userService;public function __construct(Request $request, UserService $userService){$this->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);}}

創(chuàng)建服務

<?phpnamespace App\Api\Services;use App\Api\Actions\CreateUser;use App\Api\Response;use App\Models\Member;class UserService{public $member;public function __construct(Member $member){$this->member = $member;}public function register($data){try {return Response::success ((new CreateUser())->execute ($data));} catch (\Exception $e) {return Response::error ($e->getMessage ());}}}

創(chuàng)建動作

<?phpnamespace App\Api\Actions;use App\Models\Member;use App\Models\MemberData;class CreateUser{/*** @param array $data** @return mixed* @throws \Exception*/public function execute(array $data){$member = new Member();$member->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;}}

請求

<?php$curl = curl_init();curl_setopt_array($curl, array(CURLOPT_URL => "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("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 設置的版本只是默認訪問版本,如果想訪問其他版本,需在header內添加

Accept:application/vnd.{API_SUBTYPE}.v2+json

不想添加前綴怎么辦

API_PREFIX=/

API_PREFIX不能為空,必須填寫內容,那理所當然的/一定是正確的

致謝

感謝你看到這里,以上為個人研究開發(fā)的總結以及代碼,如果可以幫到你,我很高興。如果有什么問題或者文章有哪些錯誤,請在評論區(qū)回復,及時阻止我誤導他人。謝謝

總結

以上是生活随笔為你收集整理的五分钟入门 Dingo API的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。