Начало работы с Dingo API за 5 минут

задняя часть PHP
Начало работы с Dingo API за 5 минут

на основеПотяните Ravel-China.org/docs/top oh-…Документы описывают Динго более лаконично, фокусируются непосредственно на ключевых моментах и ​​фокусируются на практике.

Обзор

DINGO API, чтобы помочь вам быстро создать свой собственный API. Хотя целью этой программы является сохранение гибкости, насколько это возможно, но она все равно не охватывает все ситуации и решает все проблемы.

Установить

Добавьте следующий код в composer.json и выполните обновление или установку композитора.

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

Laravel

Опубликуйте файл конфигурации, после выполнения этой команды файл конфигурации api.php будет сгенерирован в каталоге config.

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

Lumen

Если вы используете lumen, поскольку у lumen нет команды поставщика, откройте bootstrap/app.php и зарегистрируйте поставщика услуг:

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

Facade

API поставляется с двумя фасадами, которые вы можете использовать по своему усмотрению.

Dingo\Api\Facade\API

Это фасад планировщика, который предоставляет несколько полезных вспомогательных методов.

Dingo\Api\Facade\Route

Вы можете использовать этот фасад, чтобы получить текущий маршрут API, запросить его, проверить имя текущего маршрута и т. д.

Вы можете зарегистрировать фасад в алиасе Config / app.php

'aliases' => [
	...
	'API'          => Dingo\Api\Facade\API::class,
	'ApiRoute'     => Dingo\Api\Facade\Route::class,
],

настроить

Настройте API Dingo в файле .env.

  • API_STANDARDS_TREE
  • API_SUBTYPE
  • API_PREFIX
  • API_VERSION
  • API_NAME
  • API_CONDITIONAL_REQUEST
  • API_STRICT
  • API_DEBUG
  • API_DEFAULT_FORMAT

API_STANDARDS_TREE

Дерево стандартов

  • Незарегистрированное дерево (x) в основном представляет локальные и частные среды.
  • Частное дерево (prs) в основном представляет проекты, не имеющие коммерческого релиза.
  • Дерево поставщиков (vnd) в основном представляет публично выпущенные проекты.

Это концептуальная вещь, похожая на ветку 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+json

API_DEBUG

Включать ли отладку, после включения апи вы увидите

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 ('Dingo\Api\Routing\Router');
$api->post ('user/register', 'App\Api\Controllers\UserController@register');
});

Создание пользовательских ответов

<?php

    namespace 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,
			];
		}
	}

Создать контроллер

<?php
	namespace 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);
		}
	}

Создать сервис

<?php
	namespace 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 ());
			}
		}
	}

Создать действие

<?php
	namespace 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;
}

Трудноизлечимые заболевания

Перечисляет некоторые распространенные проблемы и решения

Как посетить после версии

Версия, установленная API_VERSION, является только версией доступа по умолчанию. Если вы хотите получить доступ к другим версиям, вам нужно добавить ее в заголовок.

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

Что делать, если вы не хотите добавлять префикс

API_PREFIX=/

API_PREFIX не может быть пустым, его необходимо заполнить, это естественно/должно быть правильно

Спасибо

Спасибо, что увидели это, выше приведено резюме и код для развития личных исследований. Если вы можете помочь вам, я очень рад. Если есть какие-либо проблемы или что-то не так со статьей, пожалуйста, ответьте в области комментариев, чтобы я вовремя не вводил других в заблуждение. Благодарность

общаться

Жизнь бесконечна, кодирование бесконечно.

WeChat поиск【Понять в одной статье】Распространяйте положительную энергию технологий и продолжайте осваивать новые знания.