feat: add DBOS skills for TypeScript, Python, and Go (#94)
Add three DBOS SDK skills with reference documentation for building reliable, fault-tolerant applications with durable workflows. Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
52
skills/dbos-python/references/pattern-idempotency.md
Normal file
52
skills/dbos-python/references/pattern-idempotency.md
Normal file
@@ -0,0 +1,52 @@
|
||||
---
|
||||
title: Use Workflow IDs for Idempotency
|
||||
impact: MEDIUM
|
||||
impactDescription: Prevents duplicate executions of critical operations
|
||||
tags: idempotency, workflow-id, deduplication, exactly-once
|
||||
---
|
||||
|
||||
## Use Workflow IDs for Idempotency
|
||||
|
||||
Set workflow IDs to make operations idempotent. A workflow with the same ID executes only once.
|
||||
|
||||
**Incorrect (duplicate payments possible):**
|
||||
|
||||
```python
|
||||
@app.post("/pay/{order_id}")
|
||||
def process_payment(order_id: str):
|
||||
# Multiple clicks = multiple payments!
|
||||
handle = DBOS.start_workflow(payment_workflow, order_id)
|
||||
return handle.get_result()
|
||||
```
|
||||
|
||||
**Correct (idempotent with workflow ID):**
|
||||
|
||||
```python
|
||||
from dbos import SetWorkflowID
|
||||
|
||||
@app.post("/pay/{order_id}")
|
||||
def process_payment(order_id: str):
|
||||
# Same order_id = same workflow ID = only one execution
|
||||
with SetWorkflowID(f"payment-{order_id}"):
|
||||
handle = DBOS.start_workflow(payment_workflow, order_id)
|
||||
return handle.get_result()
|
||||
|
||||
@DBOS.workflow()
|
||||
def payment_workflow(order_id: str):
|
||||
charge_customer(order_id)
|
||||
send_confirmation(order_id)
|
||||
return "success"
|
||||
```
|
||||
|
||||
Access the workflow ID inside workflows:
|
||||
|
||||
```python
|
||||
@DBOS.workflow()
|
||||
def my_workflow():
|
||||
current_id = DBOS.workflow_id
|
||||
DBOS.logger.info(f"Running workflow {current_id}")
|
||||
```
|
||||
|
||||
Workflow IDs must be globally unique. Duplicate IDs return the existing workflow's result without re-executing.
|
||||
|
||||
Reference: [Workflow IDs and Idempotency](https://docs.dbos.dev/python/tutorials/workflow-tutorial#workflow-ids-and-idempotency)
|
||||
Reference in New Issue
Block a user