Design ★ 18,759

api-design-reviewer

REST API tasarımınızı otomatik linting, breaking-change tespiti ve tasarım skorkaritleri ile kapsamlı şekilde gözden geçirin. Tutarsız kurallar, eksik versiyonlama ve tasarım sorunlarını API'lar yayına çıkmadan yakalar. PR'larda endpoint eklemesi/değişikliğini incelerken, mevcut API'nizi v2 migrasyonu için denetlerken veya ekibiniz için API standartları belirlerken kullanın.

cd ~/.claude/skills
git clone https://github.com/alirezarezvani/claude-skills.git claude-skills

API Tasarım İncelemeci

Tier: POWERFUL
Kategori: Mühendislik / Mimari
Bakım Sorumlusu: Claude Skills Team

Genel Bakış

API Tasarım İncelemeci becerisi, API tasarımlarının kapsamlı analiz ve incelemesini sağlar; REST kurallarına, en iyi uygulamalara ve endüstri standartlarına odaklanır. Bu beceri, mühendislik ekiplerine otomatik linting, breaking change tespiti ve tasarım skorkarti aracılığıyla tutarlı, bakım yapılabilir ve iyi tasarlanmış API'ler oluşturmalarına yardımcı olur.

Temel Yetenekler

1. API Linting ve Convention Analizi

  • Resource Adlandırma Kuralları: Kaynaklar için kebab-case, alanlar için camelCase zorunlu kılar
  • HTTP Method Kullanımı: GET, POST, PUT, PATCH, DELETE'in doğru kullanımını valide eder
  • URL Yapısı: Endpoint desenlerini tutarlılık ve RESTful tasarım açısından analiz eder
  • Status Code Uyumluluğu: Uygun HTTP status kodlarının kullanıldığından emin olur
  • Error Response Formatları: Tutarlı error response yapılarını valide eder
  • Dokümantasyon Kapsamı: Eksik açıklamalar ve dokümantasyon boşluklarını kontrol eder

2. Breaking Change Tespiti

  • Endpoint Kaldırılması: Kaldırılan veya deprecated endpoint'leri tespit eder
  • Response Shape Değişiklikleri: Response yapılarındaki değişiklikleri tanımlar
  • Field Kaldırılması: API response'larında kaldırılan veya yeniden adlandırılan alanları izler
  • Type Değişiklikleri: Client'ları kırabilen field type değişikliklerini yakalar
  • Required Field Eklenmesi: Mevcut entegrasyonları kırabilen yeni required alanları işaretler
  • Status Code Değişiklikleri: Beklenen status kodlarındaki değişiklikleri tespit eder

3. API Tasarım Puanlaması ve Değerlendirmesi

  • Consistency Analizi (%30): Adlandırma kurallarını, response desenlerini ve yapısal tutarlılığı değerlendirir
  • Dokümantasyon Kalitesi (%20): API dokümantasyonunun tamlığını ve netliğini değerlendirir
  • Security İmplementasyonu (%20): Authentication, authorization ve security header'larını inceler
  • Usability Tasarımı (%15): Kullanım kolaylığını, keşfedilebilirliği ve geliştirici deneyimini analiz eder
  • Performance Desenleri (%15): Caching, pagination ve efficiency desenlerini değerlendirir

REST Tasarım Prensipleri

Resource Adlandırma Kuralları

✅ İyi Örnekler:
- /api/v1/users
- /api/v1/user-profiles
- /api/v1/orders/123/line-items

❌ Kötü Örnekler:
- /api/v1/getUsers
- /api/v1/user_profiles
- /api/v1/orders/123/lineItems

HTTP Method Kullanımı

  • GET: Kaynakları al (safe, idempotent)
  • POST: Yeni kaynaklar oluştur (non-idempotent)
  • PUT: Tüm kaynakları değiştir (idempotent)
  • PATCH: Kısmi kaynak güncellemeleri (zorunlu değil idempotent)
  • DELETE: Kaynakları sil (idempotent)

URL Yapısı En İyi Uygulamaları

Collection Resources: /api/v1/users
Individual Resources: /api/v1/users/123
Nested Resources: /api/v1/users/123/orders
Actions: /api/v1/users/123/activate (POST)
Filtering: /api/v1/users?status=active&role=admin

Versioning Stratejileri

1. URL Versioning (Önerilen)

/api/v1/users
/api/v2/users

Avantajları: Net, açık, yönlendirmesi kolay
Dezavantajları: URL çoğalması, caching karmaşıklığı

2. Header Versioning

GET /api/users
Accept: application/vnd.api+json;version=1

Avantajları: Temiz URL'ler, content negotiation
Dezavantajları: Daha az görünür, manuel test zor

3. Media Type Versioning

GET /api/users
Accept: application/vnd.myapi.v1+json

Avantajları: RESTful, multiple representations'ı destekler
Dezavantajları: Karmaşık, uygulanması zor

4. Query Parameter Versioning

/api/users?version=1

Avantajları: Uygulanması basit
Dezavantajları: RESTful değil, yoksayılabilir

Pagination Desenleri

Offset-Based Pagination

{
  "data": [...],
  "pagination": {
    "offset": 20,
    "limit": 10,
    "total": 150,
    "hasMore": true
  }
}

Cursor-Based Pagination

{
  "data": [...],
  "pagination": {
    "nextCursor": "eyJpZCI6MTIzfQ==",
    "hasMore": true
  }
}

Page-Based Pagination

{
  "data": [...],
  "pagination": {
    "page": 3,
    "pageSize": 10,
    "totalPages": 15,
    "totalItems": 150
  }
}

Error Response Formatları

Standart Error Yapısı

{
  "error": {
    "code": "VALIDATION_ERROR",
    "message": "The request contains invalid parameters",
    "details": [
      {
        "field": "email",
        "code": "INVALID_FORMAT",
        "message": "Email address is not valid"
      }
    ],
    "requestId": "req-123456",
    "timestamp": "2024-02-16T13:00:00Z"
  }
}

HTTP Status Code Kullanımı

  • 400 Bad Request: Geçersiz request syntax veya parametreler
  • 401 Unauthorized: Authentication gerekli
  • 403 Forbidden: Erişim reddedildi (authenticated fakat authorized değil)
  • 404 Not Found: Kaynak bulunamadı
  • 409 Conflict: Kaynak çatışması (duplicate, version mismatch)
  • 422 Unprocessable Entity: Geçerli syntax fakat semantic hatalar
  • 429 Too Many Requests: Rate limit aşıldı
  • 500 Internal Server Error: Beklenmeyen server hatası

Authentication ve Authorization Desenleri

Bearer Token Authentication

Authorization: Bearer <token>

API Key Authentication

X-API-Key: <api-key>
Authorization: Api-Key <api-key>

OAuth 2.0 Flow

Authorization: Bearer <oauth-access-token>

Role-Based Access Control (RBAC)

{
  "user": {
    "id": "123",
    "roles": ["admin", "editor"],
    "permissions": ["read:users", "write:orders"]
  }
}

Rate Limiting İmplementasyonu

Headers

X-RateLimit-Limit: 1000
X-RateLimit-Remaining: 999
X-RateLimit-Reset: 1640995200

Limit Aşıldığında Response

{
  "error": {
    "code": "RATE_LIMIT_EXCEEDED",
    "message": "Too many requests",
    "retryAfter": 3600
  }
}

HATEOAS (Hypermedia as the Engine of Application State)

Örnek İmplementasyon

{
  "id": "123",
  "name": "John Doe",
  "email": "john@example.com",
  "_links": {
    "self": { "href": "/api/v1/users/123" },
    "orders": { "href": "/api/v1/users/123/orders" },
    "profile": { "href": "/api/v1/users/123/profile" },
    "deactivate": { 
      "href": "/api/v1/users/123/deactivate",
      "method": "POST"
    }
  }
}

Idempotency

Idempotent Methods

  • GET: Her zaman safe ve idempotent
  • PUT: Idempotent olmalıdır (tüm kaynağı değiştir)
  • DELETE: Idempotent olmalıdır (aynı sonuç)
  • PATCH: Idempotent olabilir veya olmayabilir

Idempotency Keys

POST /api/v1/payments
Idempotency-Key: 123e4567-e89b-12d3-a456-426614174000

Backward Compatibility Yönergeleri

Güvenli Değişiklikler (Non-Breaking)

  • Request'lere optional alanlar eklemek
  • Response'lara alanlar eklemek
  • Yeni endpoint'ler eklemek
  • Required alanları optional yapmak
  • Yeni enum değerleri eklemek (graceful handling ile)

Breaking Değişiklikler (Version Bump Gereklidir)

  • Response'lardan alanları kaldırmak
  • Optional alanları required yapmak
  • Field type'larını değiştirmek
  • Endpoint'leri kaldırmak
  • URL yapılarını değiştirmek
  • Error response formatlarını değiştirmek

OpenAPI/Swagger Validation

Gerekli Bileşenler

  • API Information: Başlık, açıklama, versiyon
  • Server Information: Base URL'ler ve açıklamalar
  • Path Definitions: Tüm endpoint'ler ve method'lar
  • Parameter Definitions: Query, path, header parametreleri
  • Request/Response Schemas: Tam data modelleri
  • Security Definitions: Authentication şemaları
  • Error Responses: Standart error formatları

En İyi Uygulamalar

  • Tutarlı adlandırma kuralları kullanmak
  • Tüm bileşenler için detaylı açıklamalar sağlamak
  • Karmaşık objeler için örnekler eklemek
  • Reusable component'ler ve schema'lar tanımlamak
  • OpenAPI specification'a karşı valide etmek

Performance Hususları

Caching Stratejileri

Cache-Control: public, max-age=3600
ETag: "123456789"
Last-Modified: Wed, 21 Oct 2015 07:28:00 GMT

Verimli Data Transfer

  • Uygun HTTP method'larını kullanmak
  • Field selection'ı uygulamak (?fields=id,name,email)
  • Compression'ı desteklemek (gzip)
  • Verimli pagination uygulamak
  • Conditional request'ler için ETag'ları kullanmak

Resource Optimizasyonu

  • N+1 query'lerinden kaçınmak
  • Batch operations uygulamak
  • Heavy operations için async processing kullanmak
  • Partial updates'i desteklemek (PATCH)

Security En İyi Uygulamaları

Input Validation

  • Tüm input parametrelerini valide etmek
  • User data'sını sanitize etmek
  • Parameterized query'leri kullanmak
  • Request size limit'lerini uygulamak

Authentication Security

  • Her yerde HTTPS kullanmak
  • Güvenli token storage uygulamak
  • Token expiration ve refresh'i desteklemek
  • Güçlü authentication mekanizmaları kullanmak

Authorization Kontrolleri

  • Principle of least privilege uygulamak
  • Resource-based permissions kullanmak
  • Fine-grained access control'ü desteklemek
  • Access pattern'lerini audit etmek

Tools ve Scripts

api_linter.py

API specification'larını REST convention'ları ve en iyi uygulamalar açısından analiz eder.

Özellikler:

  • OpenAPI/Swagger spec validation
  • Adlandırma convention kontrolleri
  • HTTP method kullanımı validation
  • Error format tutarlılığı
  • Dokümantasyon tamlığı analizi

breaking_change_detector.py

API specification versiyonlarını karşılaştırarak breaking change'leri tanımlar.

Özellikler:

  • Endpoint karşılaştırması
  • Schema change tespiti
  • Field removal/modification izlemesi
  • Migration guide oluşturma
  • Impact severity değerlendirmesi

api_scorecard.py

API tasarım kalitesinin kapsamlı puanlamasını sağlar.

Özellikler:

  • Multi-dimensional scoring
  • Detaylı improvement tavsiyeler
  • Letter grade değerlendirmesi (A-F)
  • Benchmark karşılaştırmaları
  • Progress tracking

Integration Örnekleri

CI/CD Integration

- name: "api-linting"
  run: python scripts/api_linter.py openapi.json

- name: "breaking-change-detection"
  run: python scripts/breaking_change_detector.py openapi-v1.json openapi-v2.json

- name: "api-scorecard"
  run: python scripts/api_scorecard.py openapi.json

Pre-commit Hooks

#!/bin/bash
python engineering/api-design-reviewer/scripts/api_linter.py api/openapi.json
if [ $? -ne 0 ]; then
  echo "API linting failed. Please fix the issues before committing."
  exit 1
fi

En İyi Uygulamalar Özeti

  1. Tutarlılık Önce: Adlandırma, response formatları ve desenlerde tutarlılığı korumak
  2. Dokümantasyon: Kapsamlı, güncel API dokümantasyonu sağlamak
  3. Versioning: Clear versioning stratejileri ile evolution'u planlamak
  4. Error Handling: Tutarlı, bilgilendirici error response'lar uygulamak
  5. Security: API'nin her katmanında security inşa etmek
  6. Performance: Baştan itibaren scale ve efficiency için tasarlamak
  7. Backward Compatibility: Breaking change'leri minimize etmek ve migration path'leri sağlamak
  8. Testing: Contract testing dahil kapsamlı testing uygulamak
  9. Monitoring: API kullanımı ve performance'ı için observability eklemek
  10. Developer Experience: Kullanım kolaylığını ve net dokümantasyonu önceliklendirmek

Kaçınılması Gereken Yaygın Anti-Patterns

  1. Verb-based URL'ler: Action'lar için değil, kaynaklar için noun'lar kullanmak
  2. Inconsistent Response Formatları: Standart response yapılarını korumak
  3. Over-nesting: Derin nested resource hierarchy'lerinden kaçınmak
  4. HTTP Status Code'ları Göz Ardı Etmek: Farklı senaryolar için uygun status code'lar kullanmak
  5. Kötü Error Message'lar: Actionable, spesifik error bilgisi sağlamak
  6. Eksik Pagination: List endpoint'lerine her zaman pagination eklemek
  7. Versioning Stratejisi Olmamak: Baştan itibaren API evolution'u planlamak
  8. Internal Structure'ı Expose Etmek: API'leri internal convenience'ı değil, external consumption için tasarlamak
  9. Eksik Rate Limiting: API'nizi abuse ve overload'dan korumak
  10. Yetersiz Testing: Error case'ler ve edge condition'lar dahil tüm yönleri test etmek

Sonuç

API Tasarım İncelemeci becerisi, yüksek kaliteli REST API'ler inşa etmek, incelemek ve bakım yapmak için kapsamlı bir framework sağlar. Bu yönergeleri takip ederek ve sağlanan tool'ları kullanarak, geliştirme ekipleri tutarlı, iyi dokümante edilmiş, güvenli ve bakım yapılabilir API'ler oluşturabilir.

Linting, breaking change detection ve scoring tool'larının düzenli kullanımı, sürekli improvement'ı sağlar ve geliştirme lifecycle'ı boyunca API kalitesinin korunmasına yardımcı olur.

Benzer skill'ler

brainstorming Design

Herhangi bir yaratıcı çalışmaya başlamadan önce bunu mutlaka kullanın - feature oluştururken, component inşa ederken, functionality eklerken veya davranış değiştirirken. Kullanıcı niyetini, gereksinimleri ve tasarımı implementation öncesinde araştırır.

obra/superpowers ★ 235,495
finishing-a-development-branch Design

Uygulama tamamlandığında, tüm testler geçtiğinde ve çalışmanızı nasıl entegre edeceğinize karar vermeniz gerektiğinde kullanın - merge, PR veya cleanup seçeneklerini sunarak geliştirme sürecinin tamamlanmasını rehberlik eder.

obra/superpowers ★ 235,495
receiving-code-review Design

Kod incelemesi geri bildirimi alırken, önerileri uygulamadan önce kullanın; özellikle geri bildirim belirsiz veya teknik olarak şüpheli görünüyorsa - performatif anlaşmadan veya körü körüne uygulamadan ziyade teknik titizlik ve doğrulama gerekir.

obra/superpowers ★ 235,495
requesting-code-review Design

Görevleri tamamlarken, büyük özellikleri hayata geçirirken veya merge etmeden önce çalışmanın gereksinimleri karşıladığını doğrulamak için kullanın.

obra/superpowers ★ 235,495
using-git-worktrees Design

Yeni bir feature üzerinde çalışmaya başlarken veya implementasyon planını yürütmeden önce kullanın - native araçlar veya git worktree fallback aracılığıyla izole edilmiş bir workspace sağlar.

obra/superpowers ★ 235,495
using-superpowers Design

Herhangi bir konuşma başlatırken kullanın - skill'lerin nasıl bulunacağını ve kullanılacağını belirler, clarification soruları da dahil olmak üzere HERHANGİ bir yanıt vermeden önce skill invocation gerektirir.

obra/superpowers ★ 235,495
Daha fazla: Design →