rest-api
REST API design best practices and patterns
معلومات المصدر
- المستودع
- ffsshhttiikk/opencode-agents-skills
- آخر نشاط في المصدر
- ٢٨ فبراير ٢٠٢٦ في ٢٢:٥٤
- لغة SKILL.md المكتشفة
- الإنجليزية
- النجوم
- ٣
- التفرعات
- ٢
خيارات التثبيت
يُحدَّد Prompt الذي يراجع المصدر أولًا بشكل افتراضي. يمكنك التبديل إلى أمر مباشر أو تنزيل نسخة محلية.
مراجعة ملفات المصدر
اقرأ SKILL.md وأي ملفات مرافقة يعرضها SkillsMP قبل أن تقرر التثبيت.
عرض SKILL.md
SKILL.md
تعليمات المصدر · معاينة للقراءة فقط- name
- rest-api
- description
- REST API design best practices and patterns
- license
- MIT
- compatibility
- opencode
- metadata
- {"audience":"developers","category":"api-design"}
## What I do
- Design clean REST APIs following best practices
- Implement proper HTTP methods and status codes
- Handle pagination, filtering, and sorting
- Version APIs properly
- Document APIs with OpenAPI/Swagger
- Implement authentication and authorization
- Handle errors consistently
- Use HATEOAS where appropriate
## When to use me
When designing or implementing REST APIs.
## REST Design Principles
```
Resources: /users, /users/{id}, /users/{id}/posts
Collections: /posts, /posts?status=published
Actions as sub-resources: /users/{id}/activate, /users/{id}/deactivate
HTTP Methods:
GET - Retrieve resource(s)
POST - Create resource(s)
PUT - Replace resource
PATCH - Partial update
DELETE - Remove resource
Status Codes:
200 OK - Success
201 Created - Resource created
204 No Content - Success, no body
400 Bad Request - Invalid input
401 Unauthorized - Authentication required
403 Forbidden - Authenticated but not authorized
404 Not Found - Resource doesn't exist
409 Conflict - Resource state conflict
422 Unprocessable Entity - Validation errors
429 Too Many Requests - Rate limiting
500 Internal Server Error - Server error
```
## API Response Format
```json
{
"data": {
"id": "123",
"type": "user",
"attributes": {
"email": "user@example.com",
"name": "John Doe",
"createdAt": "2024-01-15T10:30:00Z"
},
"relationships": {
"posts": {
"links": {
"related": "/users/123/posts"
}
}
},
"links": {
"self": "/users/123"
}
},
"meta": {
"copyright": "2024"
}
}
```
## Error Response Format
```json
{
"errors": [
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"status": 422,
"code": "VALIDATION_ERROR",
"title": "Validation failed",
"detail": "The 'email' field must be a valid email address",
"source": {
"pointer": "/data/attributes/email"
},
"meta": {
"field": "email",
"value": "invalid-email"
}
}
]
}
```
## Collection Responses
```json
{
"data": [
{
"id": "1",
"type": "user",
"attributes": { "name": "User 1" }
},
{
"id": "2",
"type": "user",
"attributes": { "name": "User 2" }
}
],
"links": {
"self": "/api/v1/users?page[number]=1&page[size]=10",
"first": "/api/v1/users?page[number]=1&page[size]=10",
"last": "/api/v1/users?page[number]=10&page[size]=10",
"next": "/api/v1/users?page[number]=2&page[size]=10",
"prev": null
},
"meta": {
"totalCount": 100,
"totalPages": 10,
"currentPage": 1,
"pageSize": 10
}
}
```
## Query Parameters
```
Filtering: ?status=published&author=123
Sorting: ?sort=-createdAt,title
Pagination: ?page[number]=2&page[size]=20
Fields: ?fields[user]=email,name
Including: ?include=posts,posts.comments
Sparse Fields: ?fields[user]=id,name&fields[post]=id,title
Search: ?search=keyword
```
## API Versioning
```
URL: /api/v1/users
Header: Accept: application/vnd.api+json; version=1
```
## Best Practices
- Use plural nouns for resources: `/users` not `/user`
- Use nouns for resources, not verbs
- Return appropriate headers (ETag, Last-Modified)
- Use idempotent operations for safety
- Implement rate limiting
- Use HTTPS only
- Cache with proper headers
- Document breaking changes in new versions
عرض على GitHub