1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/liushoukun-restfulapi-tp5

Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

Dawn-Api

Последняя стабильная версия Общее количество загрузок Последняя нестабильная версия Лицензия Ежемесячное количество загрузок

Описание

RESTful API, написанный с использованием ThinkPHP5, который включает в себя обработку запросов API, аутентификацию прав доступа и автоматическое создание документации;

  • Обработка запросов RESTful стилем

Каждый интерфейс связан с одним контроллером, метод отвечает за [метод]

  • Аутентификация прав доступа

Basic, OAuth Client Credentials Grant

  • Создание документации

Простое, элегантное, не требует дополнительных средств для создания документации;

Установка

  • Если вы хотите использовать этот пакет в своём проекте ThinkPHP5, выполните следующую команду:
composer require liushoukun/dawn-api
  • Для нового проекта сначала создайте проект ThinkPHP5, затем установите пакет:
composer create-project topthink/think api --prefer-dist
composer require liushoukun/dawn-api
  • Чтобы использовать генерацию документации, установите hadmin в директории public/static/
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;
}
?>
  1. Создайте интерфейс пользователя User, расширяющий Base;
class User extends Base
  1. Добавьте маршруты ресурсов

/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,  // Включить аутентификацию

2. Реализация интерфейса AuthContract

Методы:

  • authenticate: Метод аутентификации, который возвращает true, если аутентификация успешна, иначе — false.
  • getUser: Получение информации о пользователе.

Пример реализации:

/**
 * Аутентификация клиента с использованием данных запроса и маршрутов
 * В случае успеха возвращается 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'];
}

3. Включение аутентификации в контроллере

public $apiAuth = true; // Включить аутентификацию
Конфигурация (api_auth) Класс ($apiAuth) Эффект
true true Аутентификация включена
true false Аутентификация выключена
false false Аутентификация выключена
false true Аутентификация выключена

4. Настройка класса проверки

Базовая реализация авторизации через Basic и OAuth Client Credentials Grant

  • Basic
'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, // класс авторизации
  1. Получение access_token
  • Напишите доступный метод для получения access_token
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

Измените запрос для получения информации о клиенте по необходимости

  • Запрос для получения /accessToken?client_id=20882088&secret=nGk5R2wrnZqQ02bed29rjzax1QWRIu1O или /accessToken headers Basic MjA4ODIwODg6bkdrNVIyd3nuWnZqQMDJbZWd2OTJjenphMFFXUkl1MU8=
  1. Запрос к API /v1/user?access_token=cxXpnNIdf4aSIQFjR8NYH91Uwsg8jzMZ

Быстрый способ с использованием Postman ## Автоматическое создание документации

  1. Создайте контроллер для отображения документов Doc wiki наследует DawnApi\facade\Doc;
  2. Настройте маршрут
// Документация
\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
];

![ ](. /public/doc/images/wiki.png)

Параметр Обязательность Комментарий Значение
name true Название списка интерфейсов Отображаемое название списка
id true Основной ключ Генерируется для создания списка
parent true Родительский ключ Генерируется для создания списка
class true Местоположение интерфейса Используется для генерации конкретного интерфейса
readme true markdown Можно использовать для создания документов без интерфейсов, например, некоторые объяснения, где module и controller пустые, readme заполнено путями к документам
  1. Конфигурация конкретных интерфейсов документации - Описание интерфейса (комментарии к классу)
/**
```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 документация Можно использовать для записи информации
  • Конкретное описание интерфейсов
  1. Информация об описании интерфейса (заполнение комментариев)
    /**
     * @title Получение информации о пользователе
     * @desc Получение информации о пользователе
     * @readme /doc/md/method.md
     */
   public function getResponse(\think\Request $request){}
Параметр Обязательный Комментарий Действие
title true Название интерфейса Отображение имени в списке
desc true Описание интерфейса Отображение описания
readme false Markdown документация Можно использовать для записи информации

  1. Параметры запроса
    /**
     * Правила параметров
     * @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;
    }
  1. Возвращаемые параметры (заполнение комментариев)
    * @return int id Уникальный идентификатор
    * @return string username Имя пользователя
    * @return int age Возраст
```|Параметр|Обязательный|Комментарий|
|:---:|:---:|:---:|
|Первый параметр|true|Тип||Второй параметр|true|Имя параметра|
|Третий параметр|true|Описание параметра|
>Правила заполнения типа  
```php
'string'    => 'строка',
'int'       => 'целое число',
'float'     => 'число с плавающей точкой',
'boolean'   => 'булево значение',
'date'      => 'дата',
'array'     => 'массив',
'fixed'     => 'фиксированное значение',
'enum'      => 'перечисление',
'object'    => 'объект',

Общий вид


Документация для разработчиков

Рекомендованные средства разработки

  • IDE PHPStorm
  • Моделирование запросов Postman

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

RESTful API, написанное на thinkphp5, включает обработку запросов API, аутентификацию и автоматическое создание документации. Развернуть Свернуть
Apache-2.0
Отмена

Обновления (1)

все

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/liushoukun-restfulapi-tp5.git
git@api.gitlife.ru:oschina-mirror/liushoukun-restfulapi-tp5.git
oschina-mirror
liushoukun-restfulapi-tp5
liushoukun-restfulapi-tp5
master