jobins/api-generator

在编写测试用例的同时生成API文档(Laravel)。

v0.0.9 2022-10-19 03:53 UTC

This package is auto-updated.

Last update: 2024-09-07 17:58:26 UTC


README

在编写测试用例的同时生成API文档(Laravel)。

想法

它在Laravel应用中编写测试用例的同时,使用OpenAPI规范生成API文档。生成的文档可以在swagger ui上预览,或者集成laravel-swagger-ui到应用中,或者在线使用Swagger Editor

功能
  • 所有基本设置功能,与swagger api中提供的一致。
  • 请求体将使用Laravel FormRequest类定义。
  • 请求体示例将从测试中使用的测试数据中获取。
  • 路由参数将从Laravel路由中定义。
  • 响应示例将从测试响应中获取。

安装

composer require jobins/api-generator --dev

发布资产

php artisan vendor:publish --provider="Jobins\APIGenerator\APIGeneratorServiceProvider"

基本用法

<?php

namespace Tests\Feature;

use App\Http\Requests\RegistrationRequest;
use JoBins\APIGenerator\Security\Bearer;
use JoBins\APIGenerator\Traits\HasDocsGenerator;

class RegistrationTest extends TestCase
{
    use HasDocsGenerator;
    
    /** @test */
    public function it_register_a_new_user()
    {
        $responseSchema = [
            "description" => "A User Object",
            "define"      => [
                "data.*"  => ["refSchema" => "UserSchema"],
                "message" => "Message for user",
            ],
        ];
        
        $this->setSummary("Register a new user.")
            ->setId("Register")
            ->setSecurity([Bearer::class])
            ->setTags(["Posts"])
            ->setRulesFromFormRequest(RegistrationRequest::class)
            ->defineResponseSchema($responseSchema)
            ->jsond("post", route("registration.store"), $data)
            ->assertStatus(422)
            ->assertJsonFragment([])
            ->assertJsonStructure(["message"])
            ->generate($this, true);    
    }
}

在FormRequest类的描述方法中定义参数。

/**
 * Class ExampleFormRequest
 * @package JoBins\APIGenerator\Tests\Stubs
 */
class ExampleFormRequest extends FormRequest
{
    public function rules()
    {
        return [
            "email"     => "required", // Required, String, 
            "nickname"  => "sometimes|required", // Optional Field, String
        ];
    }

    public function descriptions()
    {
        return [
            "email"     => "Email of a new user.",
            "nickname"  => "Nick name of a new user."
        ];
    }
}