-
-
Notifications
You must be signed in to change notification settings - Fork 61
Description
Code of Conduct
- I agree to follow this project's Code of Conduct
AI Policy
- I agree to follow this project's AI Policy, or I agree that AI was not used while creating this issue.
Is your feature request related to a problem? Please describe.
JSON:API spec allows both atomic and non-atomic bulk actions. This library seems to prefer atomic operations, but support for non-atomic operations seems lacking.
Use case: we're selecting students on a table and assigning them homework. There are various scenarios where this assignment may fail for each student. In those scenarios, we don't want to fail and roll back the entire operation because it would be really bad UX.
Describe the solution you'd like
In scenarios where bulk operation success is partial, we instead want to return a 207 Multi-Status response. Based on the spec, this would look something like this:
HTTP/1.1 207 Multi-Status
Content-Type: application/vnd.api+json
{
"data": [
{
"type": "student-assignments",
"id": "1",
"attributes": { "assigned_at": "2023-10-15T10:30:00Z" }
},
{
"type": "student-assignments",
"id": "2",
"attributes": { "assigned_at": "2023-10-15T10:30:00Z" }
},
{
"type": "student-assignments",
"id": "3",
"attributes": { "assigned_at": "2023-10-15T10:30:00Z" }
}
],
"errors": [
{
"status": "422",
"title": "Already Assigned",
"detail": "Student with ID '4' is already assigned that homework",
"source": { "pointer": "/data/3" },
"meta": { "student_id": "4" }
},
{
"status": "404",
"title": "Student Not Found",
"detail": "Student with ID '5' does not exist",
"source": { "pointer": "/data/4" },
"meta": { "student_id": "5" }
}
],
"meta": {
"total_requested": 5,
"successful": 3,
"failed": 2
}
}
I know about the transaction? false
option but that doesn't quite get us all the way where we need to be. We also need the framework to compile the non-atomic results and send them to the client in the 207 format in the spec.
Describe alternatives you've considered
We considered sending individual requests for each operation (not ideal, there can be hundreds) and also writing our custom logic (which defeats the purpose of using this library).
Additional context
No response
Metadata
Metadata
Assignees
Labels
Type
Projects
Status