bretrzaun/api-platform-workflow-extension

api平台与工作流组件的定见集成

dev-master 2023-06-20 16:43 UTC

This package is auto-updated.

Last update: 2024-09-20 19:40:23 UTC


README

此包正在开发中。

Build Status Build Status

简介

此包试图允许API Platform和Symfony的工作流组件之间相对简单的集成

目标是

  • 实现schema.org中概述的操作

  • 自动将工作流信息作为资源有效负载的一部分公开。

  • 包含有关所有可用转换的信息

  • 包含带有ConstraintViolation消息的可用但阻止的转换

  • 自动公开执行转换的端点。

    • 工作流应尝试使用监听器执行所有突变和持久性操作
  • 支持API Platform资源的工作流可以切换以包含工作流数据和操作

    • 工作流转换信息作为potentialAction数组添加到资源表示中
      {
        "id": 1,
        "name": "Bob",
        "potentialAction": [
          {
            "@type": "ControlAction",
            "target": {
              "@type": "Entrypoint",
              "httpMethod": "PATCH",
              "url": "/users/1?workflow=user_status&transition=ban_user"
            }
          }
        ]
      }
      
    • 如果任何潜在操作有工作流转换阻止器,这些将在属性error下作为Api Platform ConstraintViolation类类型显示
    {
      "id": 1,
      "name": "Bob",
      "potentialAction": [
        {
          "@type": "ControlAction",
          "name": "ban",
          "description": "Ban a User",
          "target": {
            "@type": "Entrypoint",
            "httpMethod": "PATCH",
            "url": "/users/1?workflow=user_status&transition=ban_user"
          },
          "error": [{
            "message": "User must be enabled before banning.",
            "propertyPath": "/enabled"
          }]
        }
      ]
    }
    • 工作流转换执行返回类型始终是主题。主题将作为响应有效负载的一部分更新潜在操作信息。如果转换成功,状态码为200;如果失败,状态码为400,并带有ConstraintViolationList。
    • 根据您如何使用工作流,您可能需要或不需要转换的数据输入。如果没有数据,您可以直接向PATCH API端点发送一个简单的包含转换的payload。如果您的流程转换需要数据输入,您可以使用DTO功能提供自定义输入类

示例

以下是一些包含基本用户晋升降级工作流的基本有效负载示例

获取用户

GET https:///api/users/5
Content-Type: application/ld+json

{
  "@context": "\/api\/contexts\/User",
  "@id": "\/api\/users\/5",
  "@type": "User",
  "id": 5,
  "email": "erik.ledner@gmail.com",
  "lastLogin": null,
  "expired": false,
  "locked": false,
  "credentialsExpired": false,
  "enabled": true,
  "roles": [
    "ROLE_ADMIN"
  ],
  "potentialAction": [
    {
      "@context": "http:\/\/schema.org",
      "@type": "Action",
      "actionStatus": "PotentialActionStatus",
      "target": {
        "httpMethod": "PATCH",
        "url": "\/api\/users\/5?workflow=user_role&transition=promote_to_superadmin"
      },
      "name": "promote_to_superadmin",
      "description": "Promote to Super Admin"
    },
    {
      "@context": "http:\/\/schema.org",
      "@type": "Action",
      "actionStatus": "PotentialActionStatus",
      "target": {
        "httpMethod": "PATCH",
        "url": "\/api\/users\/5?workflow=user_role&transition=demote_to_user"
      },
      "name": "demote_to_user",
      "description": "Demote to User"
    }
  ]
}

执行降级_to_user转换

PATCH https:///api/users/5?workflow=user_role
Content-Type: application/ld+json

{
  "transition": "demote_to_user"
}

响应

{
  "@context": "\/api\/contexts\/User",
  "@id": "\/api\/users\/5",
  "@type": "User",
  "id": 5,
  "email": "erik.ledner@gmail.com",
  "lastLogin": null,
  "expired": false,
  "locked": false,
  "credentialsExpired": false,
  "enabled": true,
  "roles": [
    "ROLE_USER"
  ],
  "potentialAction": [
    {
      "@context": "http:\/\/schema.org",
      "@type": "Action",
      "actionStatus": "PotentialActionStatus",
      "target": {
        "httpMethod": "PATCH",
        "url": "\/api\/users\/5?workflow=user_role&transition=promote_to_admin"
      },
      "name": "promote_to_admin",
      "description": "Promote to Admin"
    },
    {
      "@context": "http:\/\/schema.org",
      "@type": "Action",
      "actionStatus": "PotentialActionStatus",
      "target": {
        "httpMethod": "PATCH",
        "url": "\/api\/users\/5?workflow=user_role&transition=promote_to_superadmin"
      },
      "name": "promote_to_superadmin",
      "description": "Promote to Super Admin"
    }
  ]
}

功能

  • 验证助手
  • React admin集成(WIP)

文档

  • 启用模块
# config/packages/wesnick_workflow.yaml

wesnick_workflow:
    api_patch_transitions: true      # default
    workflow_validation_guard: true  # default
  • 为了启用工作流的API支持

    • 主题类必须实现PotentialActionInterface
    • 您可以使用PotentialActionsTrait实现此接口,或者自己实现,请确保适当地设置序列化组。在反规范化期间,包自动推送组workflowAction:output
  • 使用工作流/转换元数据添加描述性消息

路线图

许可证

此包在MIT许可证下发布。有关更多信息,请参阅包含的LICENSE文件。