RESTful API, написанный с использованием ThinkPHP5, который включает в себя обработку запросов API, аутентификацию прав доступа и автоматическое создание документации;
Каждый интерфейс связан с одним контроллером, метод отвечает за [метод]
Basic, OAuth Client Credentials Grant
Простое, элегантное, не требует дополнительных средств для создания документации;
composer require liushoukun/dawn-api
composer create-project topthink/think api --prefer-dist
composer require liushoukun/dawn-api
cd /public/static/
git clone https://git.oschina.net/liushoukun/hadmin.git
```## Использование
1. Создайте модуль demo
2. Создайте базовый бизнес-класс Base, расширяющий ApiController
```php
<?php
namespace app\demo\controller;
use DawnApi\facade\ApiController;
class Base extends ApiController
{
// Включение аутентификации прав доступа
public $apiAuth = true;
}
?>
class User extends Base
/v1/user
Route::group('v1', function() {
Route::resource('user', 'demo/User');
});
Идентификатор | Тип запроса | Генерируемый маршрут | Соответствующий метод |
---|---|---|---|
index | GET | /v1/user | index |
save | POST | /v1/user | save |
read | GET | /v1/user/:id | read |
update | PUT | /v1/user/:id | update |
delete | DELETE | /v1/user/:id | delete |
create | GET | /v1/user/create | create |
edit | GET | /v1/user/:id/edit | edit |
Дополнительные методы Если требуется добавить дополнительные операции, такие как отправка кода верификации, то в свойстве
$extraActionList
данного класса следует добавить метод:
protected $extraActionList = ['sendCode']; // Дополнительные действия
Затем зарегистрируйте маршруты:
Route::group('v1', function () {
Route::any('user/sendCode', 'demo/User@sendCode'); // Нужно зарегистрировать до ресурсного маршрута
Route::resource('user', 'demo/User');
});
Пропустить аутентификацию
Если требуется пропустить аутентификацию для отдельной операции, то в свойстве $skipAuthActionList
данного класса следует добавить метод:
protected $skipAuthActionList = ['sendCode']; // Методы, пропускающие аутентификацию
Обработка ответов```php // Успешный ответ return $this->sendSuccess($data = [], $message = 'Успех', $code = 200, $headers = [], $options = []); // Ошибочный ответ return $this->sendError($error = 400, $message = 'Ошибка', $code = 400, $data = [], $headers = [], $options = []); // Перенаправление return $this->sendRedirect($url, $params = [], $code = 302, $with = []);
### 1. Настройка конфигурации общего ключа аутентификации
```php
'api_auth' => true, // Включить аутентификацию
AuthContract
true
, если аутентификация успешна, иначе — false
.Пример реализации:
/**
* Аутентификация клиента с использованием данных запроса и маршрутов
* В случае успеха возвращается true
*
* @param Request $request
* @return bool
*/
public function authenticate(Request $request)
{
// TODO: Реализовать метод authenticate()
return true;
}
/**
* Получение информации о пользователе
* Можно использовать внутри API контроллеров
*
* @return mixed
*/
public function getUser()
{
return ['app_id' => '111', 'name' => 'dawn-api'];
}
public $apiAuth = true; // Включить аутентификацию
Конфигурация (api_auth ) |
Класс ($apiAuth ) |
Эффект |
---|---|---|
true | true | Аутентификация включена |
true | false | Аутентификация выключена |
false | false | Аутентификация выключена |
false | true | Аутентификация выключена |
Базовая реализация авторизации через Basic и OAuth Client Credentials Grant
'auth_class' => \app\demo\auth\BasicAuth::class, // Класс аутентификации
```/v1/user?client_id=test&secret=test
или
/v1/user с заголовками Basic- OAuth Клиентские учетные данные (Client Credentials)
1. Конфигурация класса аутентификации
```php
'auth_class' => \app\demo\auth\OauthAuth::class, // класс авторизации
namespace app\demo\controller;
use app\demo\auth\OauthAuth;
use think\Request;
class Auth {
public function accessToken() {
$request = Request::instance();
$oauthAuth = new OauthAuth();
return $oauthAuth->accessToken($request);
}
}
Route::any('accessToken', 'demo/auth/accessToken'); // OAuth
Измените запрос для получения информации о клиенте по необходимости
Быстрый способ с использованием Postman
![]()
![]()
## Автоматическое создание документации
// Документация
\DawnApi\route\DawnRoute::wiki();
Вы можете переопределить этот метод для хранения данных получения, используя конфигурацию для удобства tp5 добавляет дополнительную конфигурацию, создает application/extra/api_doc.php файл
return [
'1' => ['name' => 'Тестовый документ', 'id' => '1', 'parent' => '0', 'class' => '', 'readme' => ''], // Нижележащие списки являются первым уровнем каталога
'2' => ['name' => 'Получение прав', 'id' => '2', 'parent' => '1', 'class' => '', 'readme' => '/doc/md/auth.md'], // Документация без интерфейсов, загружается как markdown документ
'3' => ['name' => 'Интерфейсы пользователя', 'id' => '3', 'parent' => '1', 'readme' => '', 'class' => \app\test\controller\User::class], // Документация интерфейса User
];

Параметр | Обязательность | Комментарий | Значение |
---|---|---|---|
name | true | Название списка интерфейсов | Отображаемое название списка |
id | true | Основной ключ | Генерируется для создания списка |
parent | true | Родительский ключ | Генерируется для создания списка |
class | true | Местоположение интерфейса | Используется для генерации конкретного интерфейса |
readme | true | markdown | Можно использовать для создания документов без интерфейсов, например, некоторые объяснения, где module и controller пустые, readme заполнено путями к документам |
/**
```markdown
* Класс User
* @title Интерфейс пользователя
* @url /v1/user
* @desc Все интерфейсы, связанные с пользователем
* @version 1.0
* @readme /doc/md/user.md
*/
class User extends Base {}
Параметр | Обязательный | Комментарий | Действие |
---|---|---|---|
title | true | Название интерфейса | Отображение имени в списке |
url | true | Адрес запроса | Отображение адреса для пользователя |
desc | true | Описание интерфейса | Отображение описания |
version | false | Версия | Версия |
readme | false | Markdown документация | Можно использовать для записи информации |
/**
* @title Получение информации о пользователе
* @desc Получение информации о пользователе
* @readme /doc/md/method.md
*/
public function getResponse(\think\Request $request){}
Параметр | Обязательный | Комментарий | Действие |
---|---|---|---|
title | true | Название интерфейса | Отображение имени в списке |
desc | true | Описание интерфейса | Отображение описания |
readme | false | Markdown документация | Можно использовать для записи информации |
/**
* Правила параметров
* @name Название поля
* @type Тип данных
* @require Обязательность
* @default Значение по умолчанию
* @desc Описание
* @range Диапазон значений
* @return array
*/
public static function getRules()
{
$rules = [
'index' => [],
'create' => [
'name' => ['name' => 'name', 'type' => 'string', 'require' => 'true', 'default' => '', 'desc' => 'Имя', 'range' => ''],
'age' => ['name' => 'age', 'type' => 'integer', 'require' => 'true', 'default' => '0', 'desc' => 'Возраст', 'range' => '']
],
'sendCode' => [
'name' => ['name' => 'name', 'type' => 'string', 'require' => 'true', 'default' => '', 'desc' => 'Имя', 'range' => ''],
'age' => ['name' => 'age', 'type' => 'integer', 'require' => 'true', 'default' => '0', 'desc' => 'Возраст', 'range' => '']
]
];
// Можно объединять общие параметры
return $rules;
}
* @return int id Уникальный идентификатор
* @return string username Имя пользователя
* @return int age Возраст
```|Параметр|Обязательный|Комментарий|
|:---:|:---:|:---:|
|Первый параметр|true|Тип||Второй параметр|true|Имя параметра|
|Третий параметр|true|Описание параметра|
>Правила заполнения типа
```php
'string' => 'строка',
'int' => 'целое число',
'float' => 'число с плавающей точкой',
'boolean' => 'булево значение',
'date' => 'дата',
'array' => 'массив',
'fixed' => 'фиксированное значение',
'enum' => 'перечисление',
'object' => 'объект',
Общий вид
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )