bretrzaun / api-platform-workflow-extension
api平台与工作流组件的定见集成
dev-master
2023-06-20 16:43 UTC
Requires
- php: ^8.1
- ext-json: *
- api-platform/core: ^3.0
- symfony/framework-bundle: ^6.0
- symfony/validator: ^6.0
- symfony/workflow: ^6.0
Requires (Dev)
- symfony/phpunit-bridge: ^4.2
This package is auto-updated.
Last update: 2024-09-20 19:40:23 UTC
README
此包正在开发中。
简介
此包试图允许API Platform和Symfony的工作流组件之间相对简单的集成
目标是
-
自动将工作流信息作为资源有效负载的一部分公开。
-
包含有关所有可用转换的信息
-
包含带有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功能提供自定义输入类
- 工作流转换信息作为potentialAction数组添加到资源表示中
示例
以下是一些包含基本用户晋升降级工作流的基本有效负载示例
获取用户
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文件。