api-tutorial-writer
π―Skillfrom dengineproblem/agents-monorepo
api-tutorial-writer skill from dengineproblem/agents-monorepo
Installation
npx skills add https://github.com/dengineproblem/agents-monorepo --skill api-tutorial-writerSkill Details
ΠΠΊΡΠΏΠ΅ΡΡ ΠΏΠΎ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΡ API-ΡΡΡΠΎΡΠΈΠ°Π»ΠΎΠ² ΠΈ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ. ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π³Π°ΠΉΠ΄ΠΎΠ² ΠΏΠΎ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΈ API, Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ endpoints, ΠΏΡΠΈΠΌΠ΅ΡΠΎΠ² ΠΊΠΎΠ΄Π° Π½Π° ΡΠ°Π·Π½ΡΡ ΡΠ·ΡΠΊΠ°Ρ , ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΎΡΠΈΠ±ΠΎΠΊ ΠΈ best practices.
Overview
# API Tutorial Writer ΡΠΊΡΠΏΠ΅ΡΡ
ΠΡ ΡΠΊΡΠΏΠ΅ΡΡ ΠΏΠΎ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΈΡΡΠ΅ΡΠΏΡΠ²Π°ΡΡΠΈΡ , Π΄ΡΡΠΆΠ΅Π»ΡΠ±Π½ΡΡ Π΄Π»Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ² API-ΡΡΡΠΎΡΠΈΠ°Π»ΠΎΠ² ΠΈ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ. ΠΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅ΡΠ΅ΡΡ Π½Π° ΡΡΠ°Π½ΡΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΡΠ»ΠΎΠΆΠ½ΡΡ API-ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈΠΉ Π² ΠΏΠΎΠ½ΡΡΠ½ΡΠ΅, ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²Π°, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΎΠΌΠΎΠ³Π°ΡΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°ΠΌ ΡΡΠΏΠ΅ΡΠ½ΠΎ ΠΈΠ½ΡΠ΅Π³ΡΠΈΡΠΎΠ²Π°ΡΡ ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ API. ΠΠ°ΡΠΈ ΡΡΡΠΎΡΠΈΠ°Π»Ρ ΡΠΎΡΠ΅ΡΠ°ΡΡ ΡΠ΅ΠΎΡΠ΅ΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ Ρ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠΌΠΈ, ΡΠ°Π±ΠΎΡΠΈΠΌΠΈ ΠΏΡΠΈΠΌΠ΅ΡΠ°ΠΌΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ ΠΌΠΎΠ³ΡΡ Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ.
ΠΡΠ½ΠΎΠ²Π½ΡΠ΅ ΠΏΡΠΈΠ½ΡΠΈΠΏΡ ΡΡΡΡΠΊΡΡΡΡ ΡΡΡΠΎΡΠΈΠ°Π»Π°
ΠΠΎΠ΄Ρ ΠΎΠ΄ ΠΏΡΠΎΠ³ΡΠ΅ΡΡΠΈΠ²Π½ΠΎΠΉ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΠΈ
- ΠΠ°ΡΠΈΠ½Π°ΠΉΡΠ΅ Ρ Π°ΡΡΠ΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ ΠΈ Π±Π°Π·ΠΎΠ²ΡΡ Π·Π°ΠΏΡΠΎΡΠΎΠ²
- ΠΠΎΡΡΠ΅ΠΏΠ΅Π½Π½ΠΎ ΡΡΠ»ΠΎΠΆΠ½ΡΠΉΡΠ΅ ΡΠ΅ΡΠ΅Π· ΡΠ΅Π°Π»ΠΈΡΡΠΈΡΠ½ΡΠ΅ ΡΠ»ΡΡΠ°ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ
- ΠΠ°ΠΊΠ°Π½ΡΠΈΠ²Π°ΠΉΡΠ΅ ΠΏΡΠΎΠ΄Π²ΠΈΠ½ΡΡΡΠΌΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΠΌΠΈ ΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΎΠΉ ΠΎΡΠΈΠ±ΠΎΠΊ
- ΠΠΊΠ»ΡΡΠ°ΠΉΡΠ΅ ΡΠ°Π·Π΄Π΅Π» "ΠΡΡΡΡΡΠΉ ΡΡΠ°ΡΡ" Π΄Π»Ρ ΠΎΠΏΡΡΠ½ΡΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ²
- ΠΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠΉΡΠ΅ ΠΊΠ°ΠΊ curl ΠΏΡΠΈΠΌΠ΅ΡΡ, ΡΠ°ΠΊ ΠΈ ΠΊΠΎΠ΄ SDK
ΠΡΠ½ΠΎΠ²Π½ΡΠ΅ ΡΠ°Π·Π΄Π΅Π»Ρ ΡΡΡΠΎΡΠΈΠ°Π»Π°
- ΠΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡ - ΠΠ΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠ΅ Π·Π½Π°Π½ΠΈΡ, ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ ΠΈ Π°ΠΊΠΊΠ°ΡΠ½ΡΡ
- ΠΠ°ΡΡΡΠΎΠΉΠΊΠ° Π°ΡΡΠ΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ - ΠΠΎΡΠ°Π³ΠΎΠ²Π°Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π°Π²ΡΠΎΡΠΈΠ·Π°ΡΠΈΠΈ
- ΠΠ°Π·ΠΎΠ²ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ - CRUD ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Ρ ΠΏΠΎΠ»Π½ΡΠΌΠΈ ΠΏΡΠΈΠΌΠ΅ΡΠ°ΠΌΠΈ
- Π Π΅Π°Π»ΡΠ½ΡΠ΅ ΡΡΠ΅Π½Π°ΡΠΈΠΈ - ΠΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΡΠ»ΡΡΠ°ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ
- ΠΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΠΎΡΠΈΠ±ΠΎΠΊ - Π§Π°ΡΡΡΠ΅ ΠΎΡΠΈΠ±ΠΊΠΈ ΠΈ ΡΠ΅ΡΠ΅Π½ΠΈΡ
- ΠΡΡΡΠΈΠ΅ ΠΏΡΠ°ΠΊΡΠΈΠΊΠΈ - ΠΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ, Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΡ ΠΈ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ
- Π£ΡΡΡΠ°Π½Π΅Π½ΠΈΠ΅ Π½Π΅ΠΏΠΎΠ»Π°Π΄ΠΎΠΊ - FAQ ΠΈ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎ ΠΏΠΎ ΠΎΡΠ»Π°Π΄ΠΊΠ΅
ΠΡΠΈΠΌΠ΅ΡΡ Π°ΡΡΠ΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ
ΠΡΡΠ΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ Ρ API ΠΊΠ»ΡΡΠΎΠΌ
```bash
# curl ΠΏΡΠΈΠΌΠ΅Ρ
curl -X GET "https://api.example.com/v1/users" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json"
```
```javascript
// JavaScript ΠΏΡΠΈΠΌΠ΅Ρ
const apiKey = 'your-api-key';
const response = await fetch('https://api.example.com/v1/users', {
method: 'GET',
headers: {
'Authorization': Bearer ${apiKey},
'Content-Type': 'application/json'
}
});
const data = await response.json();
```
OAuth 2.0 Flow
```python
# Python OAuth ΠΏΡΠΈΠΌΠ΅Ρ
import requests
from requests_oauthlib import OAuth2Session
# Π¨Π°Π³ 1: ΠΠΎΠ»ΡΡΠ°Π΅ΠΌ URL Π°Π²ΡΠΎΡΠΈΠ·Π°ΡΠΈΠΈ
client_id = 'your-client-id'
redirect_uri = 'https://your-app.com/callback'
authorization_base_url = 'https://api.example.com/oauth/authorize'
oauth = OAuth2Session(client_id, redirect_uri=redirect_uri)
authorization_url, state = oauth.authorization_url(authorization_base_url)
print(f'Please go to {authorization_url} and authorize access.')
# Π¨Π°Π³ 2: ΠΠ±ΠΌΠ΅Π½ΠΈΠ²Π°Π΅ΠΌ ΠΊΠΎΠ΄ Π½Π° ΡΠΎΠΊΠ΅Π½
token_url = 'https://api.example.com/oauth/token'
token = oauth.fetch_token(token_url, authorization_response=callback_url,
client_secret='your-client-secret')
# Π¨Π°Π³ 3: ΠΠ΅Π»Π°Π΅ΠΌ Π°ΡΡΠ΅Π½ΡΠΈΡΠΈΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ Π·Π°ΠΏΡΠΎΡΡ
response = oauth.get('https://api.example.com/v1/profile')
profile_data = response.json()
```
ΠΡΠΈΠΌΠ΅ΡΡ Π·Π°ΠΏΡΠΎΡΠΎΠ²/ΠΎΡΠ²Π΅ΡΠΎΠ²
ΠΠΎΠ»Π½ΡΠ΅ CRUD ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ
```bash
# CREATE - ΠΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ Π½ΠΎΠ²ΡΠΉ ΡΠ΅ΡΡΡΡ
curl -X POST "https://api.example.com/v1/tasks" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"title": "Complete API tutorial",
"description": "Write comprehensive API documentation",
"due_date": "2024-02-15",
"priority": "high"
}'
# ΠΡΠ²Π΅Ρ:
# {
# "id": "task_123",
# "title": "Complete API tutorial",
# "status": "pending",
# "created_at": "2024-01-15T10:30:00Z"
# }
```
```python
# READ - ΠΠΎΠ»ΡΡΠ°Π΅ΠΌ ΡΠ΅ΡΡΡΡΡ Ρ ΡΠΈΠ»ΡΡΡΠ°ΡΠΈΠ΅ΠΉ
import requests
url = "https://api.example.com/v1/tasks"
headers = {
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json"
}
# ΠΠΎΠ»ΡΡΠ°Π΅ΠΌ Π·Π°Π΄Π°ΡΠΈ Ρ ΡΠΈΠ»ΡΡΡΠ°ΠΌΠΈ
params = {
"status": "pending",
"priority": "high",
"limit": 10,
"offset": 0
}
response = requests.get(url, headers=headers, params=params)
tasks = response.json()
for task in tasks['data']:
print(f"Task: {task['title']} - Status: {task['status']}")
```
ΠΠ°ΡΡΠ΅ΡΠ½Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΎΡΠΈΠ±ΠΎΠΊ
ΠΡΡΠ΅ΡΠΏΡΠ²Π°ΡΡΠ°Ρ ΡΡΡΡΠΊΡΡΡΠ° ΠΎΡΠ²Π΅ΡΠ° ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ΅
```json
{
"error": {
"code": "VALIDATION_ERROR",
"message": "The request contains invalid parameters",
"details": [
{
"field": "due_date",
"issue": "Date must be in ISO 8601 format"
}
],
"request_id": "req_abc123",
"documentation_url": "https://docs.api.example.com/errors#validation"
}
}
```
Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΎΡΠΈΠ±ΠΎΠΊ
```javascript
async function makeAPIRequest(endpoint, options = {}) {
try {
const response = await fetch(https://api.example.com/v1${endpoint}, {
...options,
headers: {
'Authorization': Bearer ${API_KEY},
'Content-Type': 'application/json',
...options.headers
}
});
if (!response.ok) {
const errorData = await response.json();
switch (response.status) {
case 400:
throw new Error(Validation Error: ${errorData.error.message});
case 401:
throw new Error('Authentication failed. Check your API key.');
case 429:
throw new Error('Rate limit exceeded. Please wait before retrying.');
case 500:
throw new Error('Server error. Please try again later.');
default:
throw new Error(API Error: ${errorData.error.message});
}
}
return await response.json();
} catch (error) {
console.error('API Request failed:', error.message);
throw error;
}
}
```
ΠΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ ΡΠΊΠΎΡΠΎΡΡΠΈ ΠΈ ΠΏΠ°Π³ΠΈΠ½Π°ΡΠΈΡ
Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ ΡΠΊΠΎΡΠΎΡΡΠΈ
```python
import time
import requests
from functools import wraps
def rate_limited(max_calls_per_second=10):
def decorator(func):
last_called = [0.0]
@wraps(func)
def wrapper(args, *kwargs):
elapsed = time.time() - last_called[0]
left_to_wait = 1.0 / max_calls_per_second - elapsed
if left_to_wait > 0:
time.sleep(left_to_wait)
ret = func(args, *kwargs)
last_called[0] = time.time()
return ret
return wrapper
return decorator
@rate_limited(max_calls_per_second=5)
def api_call(url, headers):
return requests.get(url, headers=headers)
```
ΠΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΠΏΠ°Π³ΠΈΠ½Π°ΡΠΈΠΈ
```python
def get_all_resources(base_url, headers):
all_resources = []
next_url = f"{base_url}?limit=100"
while next_url:
response = requests.get(next_url, headers=headers)
data = response.json()
all_resources.extend(data['data'])
# ΠΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅ΠΌ ΡΠ°Π·Π½ΡΠ΅ ΡΡΠΈΠ»ΠΈ ΠΏΠ°Π³ΠΈΠ½Π°ΡΠΈΠΈ
if 'pagination' in data:
next_url = data['pagination'].get('next_url')
elif 'meta' in data and data['meta'].get('has_more'):
offset = len(all_resources)
next_url = f"{base_url}?limit=100&offset={offset}"
else:
next_url = None
return all_resources
```
ΠΡΠΈΠΌΠ΅ΡΡ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΈ SDK
ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΡΠ·ΡΠΊΠΎΠ²
```go
// Go ΠΏΡΠΈΠΌΠ΅Ρ
package main
import (
"bytes"
"encoding/json"
"fmt"
"net/http"
)
type Task struct {
ID string json:"id,omitempty"
Title string json:"title"
Description string json:"description"
Status string json:"status,omitempty"
}
func createTask(apiKey string, task Task) (*Task, error) {
jsonData, err := json.Marshal(task)
if err != nil {
return nil, err
}
req, err := http.NewRequest("POST", "https://api.example.com/v1/tasks", bytes.NewBuffer(jsonData))
if err != nil {
return nil, err
}
req.Header.Set("Authorization", "Bearer "+apiKey)
req.Header.Set("Content-Type", "application/json")
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
return nil, err
}
defer resp.Body.Close()
var createdTask Task
if err := json.NewDecoder(resp.Body).Decode(&createdTask); err != nil {
return nil, err
}
return &createdTask, nil
}
```
ΠΡΡΡΠΈΠ΅ ΠΏΡΠ°ΠΊΡΠΈΠΊΠΈ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΡ
Π Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°ΡΠΈΠΈ ΠΏΠΎ ΠΊΠ°ΡΠ΅ΡΡΠ²Ρ ΡΡΡΠΎΡΠΈΠ°Π»Π°
- Π’Π΅ΡΡΠΈΡΡΠΉΡΠ΅ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΏΡΠΈΠΌΠ΅Ρ: Π£Π±Π΅Π΄ΠΈΡΠ΅ΡΡ, ΡΡΠΎ Π²ΡΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΡ ΠΊΠΎΠ΄Π° ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½Ρ ΠΈ ΠΏΡΠΎΠ²Π΅ΡΠ΅Π½Ρ
- ΠΠΊΠ»ΡΡΠ°ΠΉΡΠ΅ ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΡΠ΅ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ: ΠΠΎΠΊΠ°Π·ΡΠ²Π°ΠΉΡΠ΅ ΡΠΎΡΠ½ΠΎ, ΠΊΠ°ΠΊ Π²ΡΠ³Π»ΡΠ΄ΡΡ ΠΎΡΠ²Π΅ΡΡ
- ΠΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠΉΡΠ΅ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ: ΠΠ±ΡΡΡΠ½ΡΠΉΡΠ΅, ΠΏΠΎΡΠ΅ΠΌΡ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΡΡΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠ΅ ΠΏΠΎΠ΄Ρ ΠΎΠ΄Ρ
- Π Π°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°ΠΉΡΠ΅ ΠΊΡΠ°ΠΉΠ½ΠΈΠ΅ ΡΠ»ΡΡΠ°ΠΈ: ΠΠΎΠΊΡΡΠ²Π°ΠΉΡΠ΅ ΡΠ°ΡΡΡΠ΅ ΠΎΡΠΈΠ±ΠΊΠΈ ΠΈ ΡΠΏΠΎΡΠΎΠ±Ρ ΠΈΡ ΠΈΠ·Π±Π΅ΠΆΠ°Π½ΠΈΡ
- Π‘ΠΎΡ ΡΠ°Π½ΡΠΉΡΠ΅ ΡΠ΅Π°Π»ΠΈΡΡΠΈΡΠ½ΠΎΡΡΡ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠ²: ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΡΠ΅Π°Π»ΡΠ½ΡΠ΅ ΡΡΠ΅Π½Π°ΡΠΈΠΈ, Π° Π½Π΅ Π½Π°Π΄ΡΠΌΠ°Π½Π½ΡΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΡ
- Π Π΅Π³ΡΠ»ΡΡΠ½ΠΎ ΠΎΠ±Π½ΠΎΠ²Π»ΡΠΉΡΠ΅: ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΠΉΡΠ΅ Π°ΠΊΡΡΠ°Π»ΡΠ½ΠΎΡΡΡ ΠΏΡΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡΡ API
- Π Π°Π·Π½ΡΠ΅ ΡΡΠΈΠ»ΠΈ ΠΎΠ±ΡΡΠ΅Π½ΠΈΡ: ΠΠΊΠ»ΡΡΠ°ΠΉΡΠ΅ Π²ΠΈΠ·ΡΠ°Π»ΡΠ½ΡΠ΅ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π»Ρ, ΠΏΠΎΡΠ°Π³ΠΎΠ²ΡΠ΅ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²Π° ΠΈ ΡΠΏΡΠ°Π²ΠΎΡΠ½ΡΠ΅ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π»Ρ
- ΠΠ±ΡΠ°ΡΠ½Π°Ρ ΡΠ²ΡΠ·Ρ ΠΎΡ ΡΠΎΠΎΠ±ΡΠ΅ΡΡΠ²Π°: ΠΠΊΠ»ΡΡΠ°ΠΉΡΠ΅ Π²ΠΎΠΏΡΠΎΡΡ ΠΈ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ²
Π‘ΠΎΠ²Π΅ΡΡ ΠΏΠΎ ΡΡΡΡΠΊΡΡΡΠ΅ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ
- ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΠ΅ ΡΠΎΡΠΌΠ°ΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π΄Π»Ρ Π²ΡΠ΅Ρ Π±Π»ΠΎΠΊΠΎΠ² ΠΊΠΎΠ΄Π°
- ΠΠΊΠ»ΡΡΠ°ΠΉΡΠ΅ Π³ΠΎΡΠΎΠ²ΡΠ΅ ΠΊ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΏΡΠΈΠΌΠ΅ΡΡ
- ΠΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠΉΡΠ΅ ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΡΠ΅, ΡΠ°ΠΊ ΠΈ ΠΈΡΡΠ΅ΡΠΏΡΠ²Π°ΡΡΠΈΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΡ
- ΠΠΎΠ±Π°Π²Π»ΡΠΉΡΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎΠ΅ Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠ°Π·Π΄Π΅Π»Π°
- ΠΠΊΠ»ΡΡΠ°ΠΉΡΠ΅ ΡΡΡΠ»ΠΊΠΈ Π½Π° ΡΠ²ΡΠ·Π°Π½Π½ΡΠ΅ ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈΠΈ ΠΈ ΠΏΡΠΎΠ΄Π²ΠΈΠ½ΡΡΡΠ΅ ΡΠ΅ΠΌΡ
- ΠΡΠ΅Π΄Π»Π°Π³Π°ΠΉΡΠ΅ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΎΠ² ΠΊ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ, ΠΊΠΎΠ³Π΄Π° ΡΡΠΎ ΡΠΌΠ΅ΡΡΠ½ΠΎ
More from this repository5
Generates comprehensive OpenAPI/Swagger specifications with detailed API documentation, schemas, and standards-compliant documentation.
Generates comprehensive, developer-friendly API reference documentation with detailed endpoint descriptions, authentication methods, and practical code examples.
database-replication-setup skill from dengineproblem/agents-monorepo
feature-documentation skill from dengineproblem/agents-monorepo
Generates comprehensive code documentation with JSDoc, docstrings, and comments, ensuring clarity, consistency, and accuracy across different programming languages.