معرفی API

API ما یک راهکار جامع برای دسترسی به داده‌های سیستم است. این API به شما امکان می‌دهد تا به راحتی با سیستم ما تعامل داشته باشید و از امکانات آن استفاده کنید.

ویژگی‌های اصلی

  • پشتیبانی از RESTful API
  • احراز هویت با توکن
  • پاسخ‌های JSON
  • مستندات کامل

احراز هویت

برای استفاده از API، شما نیاز به یک توکن احراز هویت دارید. این توکن را می‌توانید از طریق پنل کاربری خود دریافت کنید.

استفاده از توکن

توکن را در هدر درخواست‌ها قرار دهید:


Authorization: Token YOUR_API_TOKEN
Content-Type: application/json

نقاط پایانی API

محصولات

دریافت لیست محصولات

GET /api/products/

دریافت لیست تمام محصولات با امکان فیلتر و صفحه‌بندی


{
    "count": 100,
    "next": "https://api.example.com/api/products/?page=2",
    "previous": null,
    "results": [
        {
            "id": 1,
            "title": "نام محصول",
            "price": 100000,
            "category": "دسته‌بندی",
            "in_stock": true
        }
    ]
}

فیلتر، مرتب‌سازی و صفحه‌بندی محصولات

GET /api/products/

API محصولات از امکانات پیشرفته فیلتر، مرتب‌سازی و صفحه‌بندی پشتیبانی می‌کند.

پارامترهای صفحه‌بندی:
  • page: شماره صفحه مورد نظر (پیش‌فرض: 1)
  • page_size: تعداد آیتم‌های هر صفحه (پیش‌فرض: 1، حداکثر: 100)
پارامترهای مرتب‌سازی:
  • ordering: مرتب‌سازی بر اساس فیلد دلخواه
فیلدهای قابل مرتب‌سازی:
  • name: مرتب‌سازی بر اساس نام محصول
  • price: مرتب‌سازی بر اساس قیمت
  • created_at: مرتب‌سازی بر اساس تاریخ ایجاد
  • updated_at: مرتب‌سازی بر اساس تاریخ بروزرسانی

برای مرتب‌سازی نزولی، یک علامت منفی (-) قبل از نام فیلد استفاده کنید. مثال: -price برای نمایش گران‌ترین محصولات در ابتدا.

پارامترهای فیلتر:
  • category: فیلتر براساس دسته‌بندی محصول (استفاده از slug دسته‌بندی)
  • min_price: فیلتر محصولات با قیمت بیشتر یا مساوی مقدار تعیین شده
  • max_price: فیلتر محصولات با قیمت کمتر یا مساوی مقدار تعیین شده
  • in_stock: فیلتر محصولات براساس موجودی (true/false)
  • search: جستجو در نام و توضیحات محصول
نمونه درخواست‌ها:

صفحه‌بندی:

/api/products/?page=2&page_size=20

مرتب‌سازی:

/api/products/?ordering=-price

فیلترهای محدوده قیمت:

/api/products/?min_price=1000000&max_price=5000000

فیلتر موجودی:

/api/products/?in_stock=true

ترکیب چند فیلتر:

/api/products/?category=electronics&min_price=1000000&ordering=-price&page=2

دریافت محصولات براساس دسته‌بندی

GET /api/products/by_category/

دریافت محصولات بر اساس دسته‌بندی با امکان محدود کردن تعداد نتایج

پارامترهای درخواست:
  • slug_category: شناسه یکتای دسته‌بندی (اختیاری)
  • limit: حداکثر تعداد نتایج (اختیاری، پیش‌فرض: 50، حداکثر: 100)
حالت‌های مختلف استفاده:

حالت 1: دریافت محصولات یک دسته‌بندی خاص

/api/products/by_category/?slug_category=electronics&limit=20

حالت 2: دریافت همه محصولات (تا 50 محصول) در صورت نبود دسته‌بندی

/api/products/by_category/?slug_category=invalid-category

حالت 3: دریافت همه محصولات با تعیین محدودیت تعداد

/api/products/by_category/?limit=30

{
    "results": [
        {
            "id": 1,
            "category": {
                "id": 2,
                "name": "الکترونیک",
                "slug": "electronics",
                "description": "محصولات الکترونیکی",
                "image": "categories/electronics.jpg"
            },
            "name": "گوشی موبایل سامسونگ",
            "slug": "samsung-mobile",
            "description": "گوشی موبایل سامسونگ گلکسی S21",
            "price": 15000000,
            "discount_price": 14000000,
            "stock": 25,
            "is_available": true,
            "images": [
                {
                    "id": 1,
                    "image": "products/samsung-s21.jpg",
                    "is_main": true
                }
            ],
            "created_at": "2024-04-15T09:30:00Z",
            "updated_at": "2024-04-20T14:20:00Z"
        }
    ]
}

جستجوی محصولات

GET /api/products/?search=keyword

جستجو در نام و توضیحات محصولات

پارامترهای درخواست:
  • search: کلمه کلیدی برای جستجو در نام و توضیحات محصولات
/api/products/?search=گوشی

مقالات وبلاگ

دریافت لیست مقالات

GET /api/blog/articles/

دریافت لیست تمام مقالات وبلاگ


{
    "count": 25,
    "next": "https://api.example.com/api/blog/articles/?page=2",
    "previous": null,
    "results": [
        {
            "id": 1,
            "title": "عنوان مقاله",
            "slug": "article-slug",
            "summary": "خلاصه مقاله",
            "published_at": "2024-04-20T10:00:00Z",
            "category": {
                "id": 1,
                "name": "تکنولوژی",
                "slug": "technology"
            }
        }
    ]
}

فیلتر، مرتب‌سازی و صفحه‌بندی مقالات

GET /api/blog/articles/

API مقالات وبلاگ از امکانات پیشرفته فیلتر، مرتب‌سازی و صفحه‌بندی پشتیبانی می‌کند.

پارامترهای صفحه‌بندی:
  • page: شماره صفحه مورد نظر (پیش‌فرض: 1)
  • page_size: تعداد آیتم‌های هر صفحه (پیش‌فرض: 1، حداکثر: 100)
پارامترهای مرتب‌سازی:
  • ordering: مرتب‌سازی بر اساس فیلد دلخواه
فیلدهای قابل مرتب‌سازی:
  • title: مرتب‌سازی بر اساس عنوان مقاله
  • created_at: مرتب‌سازی بر اساس تاریخ ایجاد
  • updated_at: مرتب‌سازی بر اساس تاریخ بروزرسانی
  • views_count: مرتب‌سازی بر اساس تعداد بازدید

برای مرتب‌سازی نزولی، یک علامت منفی (-) قبل از نام فیلد استفاده کنید. مثال: -created_at برای نمایش جدیدترین مقالات در ابتدا.

پارامترهای فیلتر:
  • category: فیلتر براساس دسته‌بندی مقاله (استفاده از slug دسته‌بندی)
  • search: جستجو در عنوان و محتوای مقاله
نمونه درخواست‌ها:

صفحه‌بندی:

/api/blog/articles/?page=2&page_size=20

مرتب‌سازی:

/api/blog/articles/?ordering=-views_count

فیلتر براساس دسته‌بندی:

/api/blog/articles/?category=technology

جستجو در مقالات:

/api/blog/articles/?search=پایتون

ترکیب چند فیلتر:

/api/blog/articles/?category=programming&search=پایتون&ordering=-created_at&page=2

دریافت مقالات بر اساس دسته‌بندی

GET /api/blog/articles/by_category/

دریافت مقالات بر اساس دسته‌بندی با امکان محدود کردن تعداد نتایج

پارامترهای درخواست:
  • slug_category: شناسه یکتای دسته‌بندی (اختیاری)
  • limit: حداکثر تعداد نتایج (اختیاری، پیش‌فرض: 50، حداکثر: 100)
حالت‌های مختلف استفاده:

حالت 1: دریافت مقالات یک دسته‌بندی خاص

/api/blog/articles/by_category/?slug_category=technology&limit=20

حالت 2: دریافت همه مقالات (تا 50 مقاله) در صورت نبود دسته‌بندی

/api/blog/articles/by_category/?slug_category=invalid-category

حالت 3: دریافت همه مقالات با تعیین محدودیت تعداد

/api/blog/articles/by_category/?limit=30

{
    "results": [
        {
            "id": 1,
            "title": "آموزش پایتون",
            "slug": "python-tutorial",
            "summary": "آموزش مقدماتی پایتون",
            "published_at": "2024-04-15T09:30:00Z",
            "category": {
                "id": 2,
                "name": "برنامه‌نویسی",
                "slug": "programming"
            }
        },
        {
            "id": 5,
            "title": "آموزش جاوااسکریپت",
            "slug": "javascript-tutorial",
            "summary": "آموزش پایه‌ای جاوااسکریپت",
            "published_at": "2024-04-10T14:20:00Z",
            "category": {
                "id": 2,
                "name": "برنامه‌نویسی",
                "slug": "programming"
            }
        }
    ]
}

پزشکان

دریافت لیست پزشکان

GET /api/doctors/

دریافت لیست پزشکان با اطلاعات تخصص و ساعات کاری


{
    "count": 50,
    "results": [
        {
            "id": 1,
            "name": "دکتر محمدی",
            "specialty": "متخصص قلب",
            "experience": 15,
            "clinic": "بیمارستان مهر",
            "working_hours": "9:00-17:00"
        }
    ]
}

فیلم‌ها

دریافت لیست فیلم‌ها

GET /api/movies/

دریافت لیست فیلم‌ها با اطلاعات کامل


{
    "count": 200,
    "results": [
        {
            "id": 1,
            "title": "عنوان فیلم",
            "year": 2024,
            "genre": "درام",
            "director": "کارگردان",
            "rating": 8.5
        }
    ]
}

بازیگران

دریافت لیست بازیگران

GET /api/actors/

دریافت لیست بازیگران با اطلاعات فیلم‌ها


{
    "count": 150,
    "results": [
        {
            "id": 1,
            "name": "نام بازیگر",
            "birth_date": "1980-01-01",
            "nationality": "ایرانی",
            "movies_count": 30
        }
    ]
}

حرکات ورزشی

دریافت لیست حرکات ورزشی

GET /api/exercises/exercises/

دریافت لیست حرکات ورزشی با جزئیات کامل


{
    "count": 50,
    "results": [
        {
            "id": 1,
            "name": "پرس سینه",
            "slug": "bench-press",
            "description": "تقویت عضلات سینه و سرشانه",
            "instruction": "روی نیمکت دراز بکشید، میله را بگیرید و به آرامی بالا و پایین ببرید.",
            "tips": "دقت کنید که آرنج‌های شما بیش از حد خم نشوند.",
            "category": {
                "id": 1,
                "name": "سینه",
                "slug": "chest",
                "description": "تمرینات مربوط به عضلات سینه",
                "image": "/media/exercise-categories/chest.jpg"
            },
            "muscle_groups": [
                {
                    "id": 1,
                    "name": "سینه",
                    "description": "عضلات سینه",
                    "image": "/media/muscle-groups/chest.jpg"
                },
                {
                    "id": 2,
                    "name": "سرشانه",
                    "description": "عضلات سرشانه",
                    "image": "/media/muscle-groups/shoulders.jpg"
                }
            ],
            "equipment": [
                {
                    "id": 1,
                    "name": "هالتر",
                    "description": "میله وزنه‌برداری",
                    "image": "/media/equipments/barbell.jpg"
                },
                {
                    "id": 2,
                    "name": "نیمکت",
                    "description": "نیمکت پرس سینه",
                    "image": "/media/equipments/bench.jpg"
                }
            ],
            "difficulty": "intermediate",
            "image": "/media/exercises/bench-press.jpg",
            "video_url": "https://example.com/videos/bench-press.mp4",
            "images": [
                {
                    "id": 1,
                    "image": "/media/exercise-images/bench-press-1.jpg",
                    "is_main": true
                },
                {
                    "id": 2,
                    "image": "/media/exercise-images/bench-press-2.jpg",
                    "is_main": false
                }
            ],
            "created_at": "2024-04-20T10:00:00Z",
            "updated_at": "2024-04-20T12:00:00Z"
        }
    ]
}

دریافت دسته‌بندی‌های حرکات ورزشی

GET /api/exercises/categories/

دریافت لیست دسته‌بندی‌های حرکات ورزشی

دریافت گروه‌های عضلانی

GET /api/exercises/muscle-groups/

دریافت لیست گروه‌های عضلانی

فیلتر کردن حرکات ورزشی

می‌توانید حرکات ورزشی را بر اساس معیارهای مختلف فیلتر کنید:

پارامترهای فیلتر:
  • category: فیلتر بر اساس دسته‌بندی
  • muscle_group: فیلتر بر اساس گروه عضلانی
  • difficulty: فیلتر بر اساس سطح دشواری
  • equipment: فیلتر بر اساس تجهیزات
  • search: جستجو در نام، توضیحات، دستورالعمل و نکات
مثال‌های استفاده:
/api/exercises/exercises/?category=chest
/api/exercises/exercises/?difficulty=beginner
/api/exercises/exercises/?search=پرس

دریافت حرکات ورزشی بر اساس دسته‌بندی

GET /api/exercises/exercises/by_category/

دریافت حرکات ورزشی بر اساس دسته‌بندی با قابلیت محدود کردن تعداد نتایج

پارامترهای درخواست:
  • slug_category: شناسه یکتای دسته‌بندی (اختیاری)
  • limit: حداکثر تعداد نتایج (اختیاری، پیش‌فرض: 50، حداکثر: 100)
/api/exercises/exercises/by_category/?slug_category=chest&limit=10

مثال‌های کاربردی

JavaScript


// دریافت لیست پزشکان
fetch('https://api.example.com/api/doctors/', {
    method: 'GET',
    headers: {
        'Authorization': 'Token YOUR_API_TOKEN',
        'Content-Type': 'application/json'
    }
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error('Error:', error));

Python


import requests

# دریافت لیست فیلم‌ها
headers = {
    'Authorization': 'Token YOUR_API_TOKEN',
    'Content-Type': 'application/json'
}

response = requests.get('https://api.example.com/api/movies/', headers=headers)
data = response.json()
print(data)