hatch-surf/examples/webhook-integration.md
CTO 9ff4876b56 feat: add comprehensive CLI documentation and release workflow
- Add CLI reference documentation with command examples
- Add CLI quick reference card for quick lookups
- Add troubleshooting guide for common issues
- Add GitHub Actions release workflow for binary builds
- Add CHANGELOG.md for release tracking
- Add webhook integration examples
- Add setup and verification script
- Update README with installation instructions and CLI overview

Addresses ELF-169: Document CLI and add standalone binary releases

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-06-23 10:35:10 +02:00

389 lines
9.1 KiB
Markdown

# Webhook Integration Examples
Real-world examples of using Hatch for webhook capture, testing, and debugging.
## Example 1: Stripe Webhook Testing
Capture and test Stripe webhook events in development.
### Setup
```bash
# Start Hatch server
hatch serve &
# Capture Stripe webhook events
hatch capture /webhooks/stripe \
-method POST \
-header 'Stripe-Signature:whsec_test123' \
-body '{"id":"evt_123","type":"payment_intent.succeeded","data":{"object":{"id":"pi_456","amount":2000,"currency":"usd"}}}'
```
### Development Workflow
```bash
# 1. Capture incoming webhook
hatch capture /webhooks/stripe -body '{"type":"checkout.session.completed","data":{"object":{"id":"cs_789"}}}'
# 2. Inspect captured events
hatch inspect webhooks/stripe
# 3. Search for specific event types
hatch search webhooks/stripe -query 'payment_intent.succeeded'
# 4. Replay to test handler
hatch replay <event-id> \
-endpoint webhooks/stripe \
-target http://localhost:3000/stripe/webhook
# 5. Configure mock for frontend testing
hatch mock set webhooks/stripe \
-status 200 \
-body '{"received":true}'
```
### Load Testing
```bash
# Capture multiple events
for i in {1..10}; do
hatch capture /webhooks/stripe \
-body "{\"id\":\"evt_$i\",\"type\":\"payment_intent.succeeded\"}"
done
# Replay all to load test handler
hatch inspect webhooks/stripe -limit 10 | \
jq -r '.[] | "hatch replay \(.id) -endpoint webhooks/stripe -target http://localhost:3000/stripe/webhook"' | \
bash
```
## Example 2: GitHub Webhook Debugging
Debug GitHub webhook delivery issues.
### Capture GitHub Events
```bash
# Capture push events
hatch capture /webhooks/github \
-method POST \
-header 'X-GitHub-Event:push' \
-header 'X-Hub-Signature:sha1=abc123' \
-body '{"ref":"refs/heads/main","commits":[{"id":"def456","message":"Fix bug"}]}'
# Capture pull request events
hatch capture /webhooks/github \
-method POST \
-header 'X-GitHub-Event:pull_request' \
-body '{"action":"opened","pull_request":{"number":42,"title":"New feature"}}'
```
### Debug Failed Deliveries
```bash
# Find failed webhook deliveries
hatch search webhooks/github -query 'status:500'
# Get details of failed request
hatch inspect webhooks/github -limit 5
# Replay to local debugging server
hatch replay <request-id> \
-endpoint webhooks/github \
-target http://localhost:8080/debug
```
### Mock GitHub API Responses
```bash
# Mock GitHub API for local development
hatch mock set api/github \
-status 200 \
-header 'Content-Type:application/json' \
-body '{"login":"test-user","id":12345}'
```
## Example 3: Slack Integration Testing
Test Slack app integrations without hitting real Slack APIs.
### Capture Slack Events
```bash
# Capture Slack events
hatch capture /slack/events \
-method POST \
-header 'X-Slack-Signature:v0=abc123' \
-body '{"type":"event_callback","event":{"type":"message","text":"Hello world"}}'
# Capture Slack interactive payloads
hatch capture /slack/actions \
-method POST \
-header 'X-Slack-Signature:v0=def456' \
-body '{"type":"interactive_message","actions":[{"type":"button","value":"approve"}]}'
```
### Development Setup
```bash
# Mock Slack API responses
hatch mock set slack/api \
-status 200 \
-header 'Content-Type:application/json' \
-body '{"ok":true}'
# Test message sending
hatch replay <message-event-id> \
-endpoint slack/events \
-target http://localhost:3000/slack/events
```
## Example 4: Payment Provider Integration
Test payment provider webhooks across different environments.
### Multi-Environment Setup
```bash
# Development environment
hatch mock set payments/webhook \
-status 200 \
-body '{"status":"received"}'
# Staging environment
hatch capture payments/webhook \
-body '{"type":"payment.completed","amount":1000,"currency":"USD"}'
# Replay to different environments
hatch replay <payment-id> \
-endpoint payments/webhook \
-target http://localhost:8080/payments/webhook # Local
hatch replay <payment-id> \
-endpoint payments/webhook \
-target https://staging.example.com/payments/webhook # Staging
```
### Error Simulation
```bash
# Simulate payment failure
hatch mock set payments/webhook \
-status 200 \
-body '{"status":"failed","error":"insufficient_funds"}'
# Simulate network timeout (use with caution)
hatch mock set payments/webhook \
-status 504 \
-body '{"error":"gateway_timeout"}'
```
## Example 5: API Documentation Generation
Generate OpenAPI documentation from real traffic patterns.
### Capture API Traffic
```bash
# Capture various endpoints
hatch capture /api/users -method GET
hatch capture /api/users -method POST -body '{"name":"John Doe"}'
hatch capture /api/users/123 -method GET
hatch capture /api/users/123 -method PUT -body '{"name":"Jane Doe"}'
hatch capture /api/posts -method GET
hatch capture /api/posts -method POST -body '{"title":"Hello World"}'
```
### Generate Documentation
```bash
# Generate OpenAPI specs for each endpoint
hatch doc generate api/users > users-api.json
hatch doc generate api/posts > posts-api.json
# Combine into single spec
jq -s '.[0] * .[1]' users-api.json posts-api.json > combined-api.json
# Serve with Swagger UI
docker run -p 8081:8080 \
-e SWAGGER_JSON=/openapi.json \
-v $(pwd):/usr/share/nginx/html/swagger \
swaggerapi/swagger-ui
```
## Example 6: Load Testing with Real Traffic
Capture and replay production traffic for load testing.
### Capture Production Patterns
```bash
# Capture high-traffic endpoint
hatch capture /api/critical-path -limit 1000
# Export traffic patterns
hatch inspect api/critical-path -limit 1000 > traffic-patterns.json
```
### Analyze Traffic
```bash
# Analyze request distribution
jq -r '.[] | "\(.method) \(.path)"' traffic-patterns.json | \
sort | uniq -c | sort -rn
# Find slow requests (if timing data available)
jq '.[] | select(.duration > 1000)' traffic-patterns.json
# Identify error patterns
jq '.[] | select(.status >= 400)' traffic-patterns.json
```
### Replay for Load Testing
```bash
# Create load test script
cat > load-test.sh << 'EOF'
#!/bin/bash
ENDPOINT="api/critical-path"
TARGET="https://loadtest.example.com"
REQUESTS=$(hatch inspect $ENDPOINT -limit 100)
echo "$REQUESTS" | jq -r '.[] | .id' | while read -r id; do
echo "Replaying request $id"
hatch replay "$id" -endpoint "$ENDPOINT" -target "$TARGET"
sleep 0.1 # Rate limiting
done
EOF
chmod +x load-test.sh
./load-test.sh
```
## Example 7: Mock Server for Frontend Development
Set up a comprehensive mock server for frontend development.
### Create Mock Endpoints
```bash
# User API mock
hatch mock set api/users \
-status 200 \
-header 'Content-Type:application/json' \
-body '[
{"id":1,"name":"John Doe","email":"john@example.com"},
{"id":2,"name":"Jane Smith","email":"jane@example.com"}
]'
# Authentication mock
hatch mock set api/auth \
-status 200 \
-header 'Content-Type:application/json' \
-body '{"token":"mock-jwt-token-123","expires_in":3600}'
# Error responses
hatch mock set api/errors \
-status 401 \
-header 'Content-Type:application/json' \
-body '{"error":"unauthorized","message":"Invalid credentials"}'
```
### Frontend Integration
```javascript
// Frontend code using mock API
const API_BASE = 'http://localhost:8080';
// Fetch users
const response = await fetch(`${API_BASE}/api/users`);
const users = await response.json();
// Login
const loginResponse = await fetch(`${API_BASE}/api/auth`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ email: 'user@example.com', password: 'pass' })
});
```
## Best Practices
### 1. Use Descriptive Endpoint Names
```bash
# Good
hatch capture /webhooks/stripe-payments
hatch capture /api/v2/users
# Bad
hatch capture /a
hatch capture /test
```
### 2. Include Relevant Headers
```bash
# Capture with all relevant headers
hatch capture /webhooks/github \
-header 'X-GitHub-Event:push' \
-header 'X-Hub-Signature:sha1=abc123' \
-header 'Content-Type:application/json'
```
### 3. Organize by Environment
```bash
# Development
hatch mock set dev/api/users -status 200 -body '[]'
# Staging
hatch mock set staging/api/users -status 200 -body '[{"id":1}]'
```
### 4. Use Search for Debugging
```bash
# Find all errors
hatch search api/webhooks -query 'status:500'
# Find specific event types
hatch search webhooks/stripe -query 'payment_intent'
```
### 5. Document Your Mocks
```bash
# Add comments to mock configuration
hatch mock set api/users \
-status 200 \
-header 'X-Mock-Description:Returns list of test users'
```
## Troubleshooting
### Common Issues
1. **Connection refused**: Ensure Hatch server is running (`hatch serve`)
2. **Endpoint not found**: Check endpoint ID with `curl http://localhost:8080/v1/endpoints`
3. **Request not captured**: Verify request format and headers
4. **Mock not working**: Check if mock is configured for the correct endpoint
### Debug Mode
```bash
# Enable debug logging
DEBUG=true hatch serve
# Check server logs
docker logs -f hatch-container
```
### Performance Issues
```bash
# Limit concurrent connections
hatch inspect api/heavy-endpoint -limit 10
# Use pagination for large datasets
hatch inspect api/large-dataset -limit 50
```