citizen63000/easy-api-bundle

易于创建API的完整API包

安装量: 1,300

依赖关系: 1

建议者: 0

安全: 0

星标: 5

关注者: 1

分支: 3

公开问题: 10

类型:symfony-bundle


README

Symfony扩展包,可轻松创建API,灵感来源于DarwinOnLine

CRUD控制器

示例

/**
 * @Route("/my-path", name="my_path")
 * @OA\Tag(name="MyEntity")
 */
class MyEntityCrudController extends AbstractApiController
{
    public const entityClass = MyEntity::class;
    public const entityCreateTypeClass = MyEntityType::class;
    public const entityUpdateTypeClass = MyEntityType::class;
    public const serializationGroups = ['my_entity_full'];
    public const listSerializationGroups = ['my_entity_light'];
    public const filterFields = [];
    public const filterSortFields = [];
    
    use CrudControllerTrait;
}

CRUD路由

示例

api_my_path:
  resource: "@AppBundle/Controller/MyContext/MyController.php"
  type: annotation

配置(全部为可选)

easy_api:
  authentication: true
  user_class: AppBundle\Entity\User\User
  user_tracking :
    enable: false
    connection_history_class: AppBundle\Entity\User\ConnectionHistory
  inheritance:
    entity: 'App\Entity\AbstractEntity'
    entityReferential: 'App\Entity\AbstractReferential'
    form: 'App\Form\Type\AbstractCoreType'
    repository: 'App\Form\Type\AbstractRepository'
    controller: 'App\Controller\AbstractApiController'
    serialized_form: 'App\Form\Model\SerializedForm'
  tests:
    debug: true # true by default
    datetime_format: 'Y-m-d H:i:s' # DateTimeInterface::ATOM format by default

前端应用表单选项

您可以在表单字段的attr字段中指定一些选项

  • group : 用于分组字段
  • discriminator
  • 您想要传递的其他选项

API-DOC注解

您可以使用nelmio api bundle的所有注解。DoctrineAnnorationReader无法读取self和static常量,但使用此包,您可以在问题未关闭的情况下将其作为字符串使用两种情况。

在Nelmio模型注解中

    /**
     * Get entity.
     *
     * @OA\Annotations\Response(
     *     response=200,
     *     description="Successful operation",
     *     @OA\Annotations\Schema(
     *          ref=@Nelmio\ApiDocBundle\Annotation\Model(
     *              type="static::entityClass",
     *              groups={"static::serializationGroups"}
     *          )
     *      )
     * ),
     * @param Request $request
     *
     * @return Response
     */
    public function getAction(Request $request)
    {
        ...
    }

并在一个名为"GetFormParameter"的注解中,它允许您将表单字段的API文档作为GET参数生成

     /**
      * List entities.
      *
      * @EasyApiBundle\Annotation\GetFormParameter(type="static::entitySearchTypeClass")
      * ...
      */
    public function listAction(Request $request)
    {
        ...       
    }

测试框架

用户断言

php static::$additionalAssessableFunctions 中定义它,并实现它,使用良好的参数

static::$additionalAssessableFunctions = ['assertMyAssertion'];
...
/**
* @param $key The key in response
* @param $parameter The parameter passed (optionnal)
* @param $value The value in response
*/
protected static function assertMyAssertion($key, $parameter, $value): void
{
    $parameter = $parameter ?? 'John';
    $expected = "hello world $parameter";
    $errorMessage = "Invalid value for {$key} field: expected {$expected}, get {$value}";
    static::assertTrue($expected === $value, $errorMessage);
}

性能优化