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.
[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
→