Developer Experience

⚠️ One post = one request. If you have several ideas, please split them into separate posts. It keeps voting meaningful (people rarely want all the items equally) and it lets us track and answer each one properly.
PUT requests are too difficult
In order to make a put request in V5, you need to know the entire schema of the nested object. This is bad. Here's my use case. I have a course. The course has Modules (collection type). It also has Lessons (collection type). Each lesson has some data about the lesson overall (time to complete, thumbnail, etc.) and each lesson also has a list of "screens" (component) containing the lesson information, which have their own nesting of components and data. I have a list of 200 images, each of which corresponds to a screen, and I want to update the screens in strapi with the corresponding images. I understand that you can't just send the one key/value pair you need updated with a PUT request: frankly, this is annoying but fine. One might think, instead, you could query the API for the object, copy the response, and send it back with the updated K/V pair, but you can't do that either, because all of the other metadata (documentID, etc.) in the response will give a 400 error. You need to either know the schema of the object or know which fields are metadata and strip them out to update the item. This is really just a very bad system that makes it incredibly hard to update things with the API. Clicking through hundreds of lessons on strapi to add the images would be a complete waste of my day and probably take 8 clicks or more per lesson. I spoke with Paul and Beogie on Strapi Office Hour discord and they advised me to make a post here with this issue.
0
[RFC] Resilient Bulk Ingestion & Idempotency Primitives for Document Service
Currently, in Strapi 5, there is a significant architectural gap regarding programmatic data synchronization from external sources (APIs, Webhooks, Cron Jobs). Most developers implementing data ingestion follow a "Check-then-Act" pattern: Fetch data. Query for existence via documentService.findFirst({ where: { externalId } }). If exists, update(); otherwise, create(). This pattern introduces three critical failures: Race Conditions (Idempotency Gap): In a distributed or clustered environment, two concurrent ingestion processes can both "check" and find no record, then both attempt a "create," leading to duplicate records or database unique constraint violations. Partial Batch Failure: When processing 50+ records from an external API (e.g., Hacker News), a single malformed record (validation error) crashes the entire ingestion loop, leading to data loss for the remainder of the batch. Document Service Complexity: With Strapi 5's new Document Service (Draft/Publish, I18n), managing "Upserts" becomes significantly more complex for the developer to handle manually compared to the legacy Entity Service. Use Case: The "Hacker News" Integration Test Consider a "Job Board" plugin that syncs 100 stories from Hacker News every hour. If the network blips at record #10, the sync fails. If two cron jobs overlap, the database fills with duplicates. If record #45 has a title that is too long, records #46-100 are never processed.
2
Load More
→