first commit
This commit is contained in:
351
API_README.md
Normal file
351
API_README.md
Normal file
@@ -0,0 +1,351 @@
|
||||
# Image API - Resim Manipülasyon API Dokümantasyonu
|
||||
|
||||
Bu API, dış uygulamaların resim yükleme, manipülasyon ve yönetim işlemlerini yapmasına olanak tanır.
|
||||
|
||||
## Base URL
|
||||
```
|
||||
https://image.beyhano.com.tr
|
||||
# veya development için
|
||||
http://localhost:3000
|
||||
```
|
||||
|
||||
## Authentication
|
||||
|
||||
API, JWT token tabanlı kimlik doğrulama kullanır. Her istekte `Authorization` header'ında Bearer token gönderilmelidir.
|
||||
|
||||
```
|
||||
Authorization: Bearer <your_jwt_token>
|
||||
```
|
||||
|
||||
## Endpoints
|
||||
|
||||
### 1. Kayıt Ol (Register)
|
||||
|
||||
Yeni kullanıcı kaydı oluşturur ve JWT token döner.
|
||||
|
||||
**Endpoint:** `POST /api/v1/auth/register`
|
||||
|
||||
**Request Body:**
|
||||
```json
|
||||
{
|
||||
"email": "user@example.com",
|
||||
"password": "minimum8karakter",
|
||||
"name": "Kullanıcı Adı"
|
||||
}
|
||||
```
|
||||
|
||||
**Response (200):**
|
||||
```json
|
||||
{
|
||||
"success": true,
|
||||
"message": "Kayıt başarılı",
|
||||
"data": {
|
||||
"user": {
|
||||
"id": "user_123abc",
|
||||
"email": "user@example.com",
|
||||
"name": "Kullanıcı Adı"
|
||||
},
|
||||
"accessToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**Hata Kodları:**
|
||||
- `400` - Gerekli alanlar eksik veya geçersiz
|
||||
- `409` - Email adresi zaten kullanımda
|
||||
- `500` - Sunucu hatası
|
||||
|
||||
---
|
||||
|
||||
### 2. Giriş Yap (Login)
|
||||
|
||||
Mevcut kullanıcı ile giriş yapar ve JWT token döner.
|
||||
|
||||
**Endpoint:** `POST /api/v1/auth/login`
|
||||
|
||||
**Request Body:**
|
||||
```json
|
||||
{
|
||||
"email": "user@example.com",
|
||||
"password": "minimum8karakter"
|
||||
}
|
||||
```
|
||||
|
||||
**Response (200):**
|
||||
```json
|
||||
{
|
||||
"success": true,
|
||||
"message": "Giriş başarılı",
|
||||
"data": {
|
||||
"user": {
|
||||
"id": "user_123abc",
|
||||
"email": "user@example.com",
|
||||
"name": "Kullanıcı Adı"
|
||||
},
|
||||
"accessToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**Hata Kodları:**
|
||||
- `400` - Email veya şifre eksik
|
||||
- `401` - Geçersiz email veya şifre
|
||||
- `500` - Sunucu hatası
|
||||
|
||||
---
|
||||
|
||||
### 3. Resim Yükle ve Manipüle Et
|
||||
|
||||
Resim yükler, belirtilen boyut/kalite/formatta işler ve kaydeder.
|
||||
|
||||
**Endpoint:** `POST /api/v1/images/upload`
|
||||
|
||||
**Headers:**
|
||||
```
|
||||
Authorization: Bearer <your_jwt_token>
|
||||
Content-Type: multipart/form-data
|
||||
```
|
||||
|
||||
**Request Body (FormData):**
|
||||
- `file` (required): Resim dosyası (max 10MB)
|
||||
- `width` (optional): Genişlik (px), default: 800, max: 10000
|
||||
- `height` (optional): Yükseklik (px), default: 600, max: 10000
|
||||
- `quality` (optional): Kalite (1-100), default: 90
|
||||
- `format` (optional): Format (jpeg, png, webp, avif), default: jpeg
|
||||
|
||||
**cURL Örneği:**
|
||||
```bash
|
||||
curl -X POST https://image.beyhano.com.tr/api/v1/images/upload \
|
||||
-H "Authorization: Bearer YOUR_JWT_TOKEN" \
|
||||
-F "file=@/path/to/image.jpg" \
|
||||
-F "width=1920" \
|
||||
-F "height=1080" \
|
||||
-F "quality=85" \
|
||||
-F "format=webp"
|
||||
```
|
||||
|
||||
**Response (200):**
|
||||
```json
|
||||
{
|
||||
"success": true,
|
||||
"message": "Resim başarıyla yüklendi",
|
||||
"data": {
|
||||
"image": {
|
||||
"id": "img_xyz789",
|
||||
"url": "https://image.beyhano.com.tr/uploads/xyz789.webp",
|
||||
"width": 1920,
|
||||
"height": 1080,
|
||||
"format": "webp",
|
||||
"fileSize": 245678
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**Hata Kodları:**
|
||||
- `400` - Dosya eksik, boyut çok büyük veya geçersiz tip
|
||||
- `401` - Geçersiz veya eksik token
|
||||
- `500` - Sunucu hatası
|
||||
|
||||
---
|
||||
|
||||
### 4. Resimleri Listele
|
||||
|
||||
Kullanıcının tüm resimlerini listeler.
|
||||
|
||||
**Endpoint:** `GET /api/v1/images`
|
||||
|
||||
**Headers:**
|
||||
```
|
||||
Authorization: Bearer <your_jwt_token>
|
||||
```
|
||||
|
||||
**Response (200):**
|
||||
```json
|
||||
{
|
||||
"success": true,
|
||||
"data": {
|
||||
"images": [
|
||||
{
|
||||
"id": "img_xyz789",
|
||||
"originalName": "photo.jpg",
|
||||
"url": "https://image.beyhano.com.tr/uploads/xyz789.webp",
|
||||
"width": 1920,
|
||||
"height": 1080,
|
||||
"quality": 85,
|
||||
"format": "webp",
|
||||
"fileSize": 245678,
|
||||
"createdAt": "2026-01-06T02:00:00.000Z"
|
||||
}
|
||||
],
|
||||
"total": 1
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**Hata Kodları:**
|
||||
- `401` - Geçersiz veya eksik token
|
||||
- `500` - Sunucu hatası
|
||||
|
||||
---
|
||||
|
||||
### 5. Resim Sil
|
||||
|
||||
Belirtilen ID'ye sahip resmi siler.
|
||||
|
||||
**Endpoint:** `DELETE /api/v1/images/{id}`
|
||||
|
||||
**Headers:**
|
||||
```
|
||||
Authorization: Bearer <your_jwt_token>
|
||||
```
|
||||
|
||||
**cURL Örneği:**
|
||||
```bash
|
||||
curl -X DELETE https://image.beyhano.com.tr/api/v1/images/img_xyz789 \
|
||||
-H "Authorization: Bearer YOUR_JWT_TOKEN"
|
||||
```
|
||||
|
||||
**Response (200):**
|
||||
```json
|
||||
{
|
||||
"success": true,
|
||||
"message": "Resim başarıyla silindi"
|
||||
}
|
||||
```
|
||||
|
||||
**Hata Kodları:**
|
||||
- `401` - Geçersiz veya eksik token
|
||||
- `404` - Resim bulunamadı veya size ait değil
|
||||
- `500` - Sunucu hatası
|
||||
|
||||
---
|
||||
|
||||
## Örnek Kullanım (JavaScript/Node.js)
|
||||
|
||||
```javascript
|
||||
// 1. Kayıt ol
|
||||
const registerResponse = await fetch('https://image.beyhano.com.tr/api/v1/auth/register', {
|
||||
method: 'POST',
|
||||
headers: { 'Content-Type': 'application/json' },
|
||||
body: JSON.stringify({
|
||||
email: 'user@example.com',
|
||||
password: 'securepassword123',
|
||||
name: 'Kullanıcı'
|
||||
})
|
||||
});
|
||||
const { data } = await registerResponse.json();
|
||||
const token = data.accessToken;
|
||||
|
||||
// 2. Resim yükle
|
||||
const formData = new FormData();
|
||||
formData.append('file', fileInput.files[0]);
|
||||
formData.append('width', '1920');
|
||||
formData.append('height', '1080');
|
||||
formData.append('quality', '85');
|
||||
formData.append('format', 'webp');
|
||||
|
||||
const uploadResponse = await fetch('https://image.beyhano.com.tr/api/v1/images/upload', {
|
||||
method: 'POST',
|
||||
headers: { 'Authorization': `Bearer ${token}` },
|
||||
body: formData
|
||||
});
|
||||
const uploadData = await uploadResponse.json();
|
||||
console.log('Yüklenen resim:', uploadData.data.image.url);
|
||||
|
||||
// 3. Resimleri listele
|
||||
const imagesResponse = await fetch('https://image.beyhano.com.tr/api/v1/images', {
|
||||
headers: { 'Authorization': `Bearer ${token}` }
|
||||
});
|
||||
const imagesData = await imagesResponse.json();
|
||||
console.log('Toplam resim:', imagesData.data.total);
|
||||
|
||||
// 4. Resim sil
|
||||
const deleteResponse = await fetch(`https://image.beyhano.com.tr/api/v1/images/${imageId}`, {
|
||||
method: 'DELETE',
|
||||
headers: { 'Authorization': `Bearer ${token}` }
|
||||
});
|
||||
const deleteData = await deleteResponse.json();
|
||||
console.log(deleteData.message);
|
||||
```
|
||||
|
||||
## Örnek Kullanım (Python)
|
||||
|
||||
```python
|
||||
import requests
|
||||
|
||||
# 1. Kayıt ol
|
||||
register_response = requests.post(
|
||||
'https://image.beyhano.com.tr/api/v1/auth/register',
|
||||
json={
|
||||
'email': 'user@example.com',
|
||||
'password': 'securepassword123',
|
||||
'name': 'Kullanıcı'
|
||||
}
|
||||
)
|
||||
token = register_response.json()['data']['accessToken']
|
||||
|
||||
# 2. Resim yükle
|
||||
with open('image.jpg', 'rb') as f:
|
||||
upload_response = requests.post(
|
||||
'https://image.beyhano.com.tr/api/v1/images/upload',
|
||||
headers={'Authorization': f'Bearer {token}'},
|
||||
files={'file': f},
|
||||
data={
|
||||
'width': '1920',
|
||||
'height': '1080',
|
||||
'quality': '85',
|
||||
'format': 'webp'
|
||||
}
|
||||
)
|
||||
image_url = upload_response.json()['data']['image']['url']
|
||||
print(f'Yüklenen resim: {image_url}')
|
||||
|
||||
# 3. Resimleri listele
|
||||
images_response = requests.get(
|
||||
'https://image.beyhano.com.tr/api/v1/images',
|
||||
headers={'Authorization': f'Bearer {token}'}
|
||||
)
|
||||
images = images_response.json()['data']['images']
|
||||
print(f'Toplam resim: {len(images)}')
|
||||
|
||||
# 4. Resim sil
|
||||
delete_response = requests.delete(
|
||||
f'https://image.beyhano.com.tr/api/v1/images/{image_id}',
|
||||
headers={'Authorization': f'Bearer {token}'}
|
||||
)
|
||||
print(delete_response.json()['message'])
|
||||
```
|
||||
|
||||
## Güvenlik
|
||||
|
||||
- JWT token'lar 7 gün geçerlidir
|
||||
- Şifreler bcrypt ile hashlenmiş olarak saklanır
|
||||
- Token'ları güvenli bir şekilde saklayın
|
||||
- HTTPS kullanın (production'da)
|
||||
- Rate limiting uygulanabilir
|
||||
|
||||
## Limitler
|
||||
|
||||
- Maximum dosya boyutu: 10MB
|
||||
- Maximum resim boyutu: 10000x10000 px
|
||||
- Desteklenen formatlar: JPEG, PNG, WebP, AVIF, GIF
|
||||
- JWT token geçerlilik süresi: 7 gün
|
||||
|
||||
## Hata Yönetimi
|
||||
|
||||
Tüm hata yanıtları şu formatta döner:
|
||||
|
||||
```json
|
||||
{
|
||||
"error": "Hata mesajı burada"
|
||||
}
|
||||
```
|
||||
|
||||
HTTP status kodları:
|
||||
- `200` - Başarılı
|
||||
- `400` - Kötü istek (geçersiz parametreler)
|
||||
- `401` - Kimlik doğrulama hatası
|
||||
- `404` - Bulunamadı
|
||||
- `409` - Çakışma (örn: email zaten kullanımda)
|
||||
- `500` - Sunucu hatası
|
||||
Reference in New Issue
Block a user