Data API

Data API داده های عمومی وبلاگ را برمی گرداند.

  • هیچ کلید API مورد نیاز نیست.
  • همه پاسخ ها در قالب JSON هستند.
  • همه نقاط پایانی از روش HTTP GET استفاده می کنند.
  • مسیر پایه: https://blog.taptik.ir/api/data/v0/{subdomain} است
  • به عنوان مثال، اگر وبلاگ شما در https://blog.example.com است، مسیر پایه است https://blog.taptik.ir/api/data/v0/example
    • زیر دامنه وبلاگ خود را جایگزین {subdomain} کنید.

علاوه بر تماس با Data API از طریق HTTP، امکان فراخوانی آن در فایل های قالب با استفاده از Twig تابع data().. اگر می‌خواهید داده‌ها برخی از UI (مثلاً بخش پست‌های اخیر) را در وبلاگ خود ارائه دهند، روش ترجیحی است، زیرا تابع data() در زمان رندر کردن الگو، Data API را به صورت داخلی فراخوانی می کند. از بین بردن نیاز به درخواست های اضافی HTTP .

نقاط پایانی

تک شی

  • /post - یک پست/صفحه
  • /tag
  • /author
  • /blog- تنظیمات وبلاگ

چند شیء

  • /posts
  • /posts/search - جستجوی پست ها
  • /tags
  • /authors

پاسخ

برای نقاط پایانی تک شی، پاسخ یک شی است. به عنوان مثال، نقطه پایانی /post یک شی Post را برمی گرداند (برای تعاریف شی به زیر مراجعه کنید).

// A Post Object
{
    "id": 1000,
    "slug": "post",
    ...
}

برای نقاط پایانی چند شی، پاسخ به این صورت است:

{
    "data": [{}, {}], // array of objects
    "pagination": {} // a Pagination object
}

درخواست

نقاط پایانی تک شی

برای /post ، /tag ، و /author

پارام
توضیحات
نوع
id
شناسه شی
integer
حلزون حرکت کردن
حلزون جسم
string
language
به پارامتر زبان مراجعه کنید
string
keys
کلیدهای را ببینید
string

یا id یا slug برای آن نقاط پایانی مورد نیاز است.

نقطه پایانی /blog فقط language و keys را به عنوان ورودی می گیرد.

نقاط پایانی چند شی

/posts ، /posts/search ، /tags ، و /authors

پارام
توضیحات
نوع
پیش فرض
language
به پارامتر زبان مراجعه کنید
string
limit
به پارامتر محدود مراجعه کنید
integer
25
page
پارامتر صفحه را ببینید
integer
1
filter
پارامتر فیلتر را ببینید
string
""
sort
پارامتر مرتب سازی را ببینید
string
[متفاوت است]
keys
کلیدهای را ببینید
string

نقطه پایانی /posts/search علاوه بر پارامترهای فوق دارای یک پارامتر search نیز می باشد.

پارام
توضیحات
نوع
پیش فرض
search
ارزش برای جستجو
string

را /tags نقطه پایانی اختیاری دارد visibility پارامتر برای فیلتر کردن برچسب ها بر اساس قابلیت مشاهده. توجه داشته باشید که برچسب های خصوصی قرار نیست در وبلاگ به صورت عمومی نشان داده شوند. آنها فقط باید برای اهداف داخلی استفاده شوند (مثلاً: نمایش/پنهان کردن ویجت در وبلاگ در صورتی که برچسب در پست موجود باشد).

پارام
توضیحات
نوع
پیش فرض
visibility
public - فقط برچسب‌های عمومی، private - فقط برچسب‌های خصوصی، any - همه برچسب ها
string
public

1. پارامتر language

اگر وبلاگ شما دارد چندین زبان، می توانید تنظیم کنید language پارامتر یک کد زبان (مثلاً: en, fr) یک زبان در وبلاگ شما. اگر این پارامتر ارائه نشده باشد، از زبان اصلی وبلاگ استفاده می شود. از آن زبان برای بومی سازی رشته ها در پست ها، نویسندگان، برچسب ها و وبلاگ استفاده می شود.

نکته: یک تمایز مهم بین پست ها وجود دارد (/post ، /posts و /posts/search) و سایر نقاط پایانی هنگام استفاده از زبان‌ها. فرض کنید دو زبان در وبلاگ خود دارید: en (اصلی) و fr. اگر نقطه پایانی /posts را با زبان فراخوانی کنید، کد زبان fr, فقط پست هایی که دارای fr نوع هستند بازگردانده می شوند. با این حال، در سایر نقاط پایانی (نویسندگان، برچسب ها)، تمام رکوردها بدون در نظر گرفتن اینکه دارای الف هستند، بازگردانده می شوند fr نوع یا نه ترجمه‌های از دست رفته با رشته‌های زبان اصلی پر می‌شوند. دلیل آن این است که وقتی شخصی از صفحه فهرست /fr وبلاگ شما بازدید می کند، ما فقط می خواهیم پست هایی را نشان دهیم که به فرانسوی ترجمه شده اند. ما نمی خواهیم مطالب را "بازگشت" پست کنیم. با این حال، بازگشت داده های نویسنده/برچسب ها در بیشتر موارد خوب است.

به عبارت دیگر، language در نقاط پایانی پست (ها) به عنوان یک فیلتر عمل می کند، در حالی که به عنوان یک مترجم در نقاط پایانی دیگر کار می کند.

2. پارامتر limit

از پارامتر limit می توان برای محدود کردن تعداد رکوردهای برگشتی در نقاط پایانی چند شی استفاده کرد. پیش فرض 25 است. حداکثر 250 است.

3. پارامتر page

از پارامتر page می توان برای صفحه بندی نتایج استفاده کرد. این در ترکیب با پارامتر حد کار می کند. مقدار پیش فرض 1 است.

To get the first 20 results: /posts?limit=20 To get the next 20 results (page 2):
/posts?limit=20&page=2

4. پارامتر filter

مثال: (published_at > 1639665890 & published_at < 1639695890) | is_featured=true

Data API ما از Laravel FilterQ در زیر هود استفاده می کند که به شما امکان می دهد منطق پیشرفته مانند مثال بالا را با استفاده از عملگرهای مقایسه و منطقی بنویسید.

یک شرط از سه بخش تشکیل شده است:

  • key
  • operator
  • value
اپراتورها
  • = - برابر است
  • != - برابر نیست
  • > - بیشتر از
  • < - کمتر از
  • >= - بزرگتر یا مساوی است
  • <= - کمتر یا مساوی است
ارزش ها
  • null
  • bool: true یا false
  • رشته: 'hello' یا hello
    • رشته های بدون نقل قول باید با [a-zA-Z_][a-zA-Z0-9_-]+ مطابقت داشته باشند و نمی توانند true ، false ، یا null باشند.
  • اعداد: 250, -250,2.5
عملگرهای منطقی

شما می توانید از عملگرهای منطقی برای ترکیب چند شرط استفاده کنید.

  • | - OR
  • & - و

اگر به جزئیات بیشتری نیاز دارید، لطفاً به مستندات FilterQ Expressions مراجعه کنید.

کلیدهای پشتیبانی شده برای فیلتر کردن
نقطه پایانی
کلید
اپراتورهای پشتیبانی شده
نوع ارزش
توضیحات
/posts
id
همه
integer
published_at
همه
date
updated_at
همه
date
created_at
همه
date
is_featured
=, !=
boolean
slug
=, !=
string
featured_image_url
=, !=
null
فقط برای بررسی اینکه آیا پوچ است یا نه
canonical_url
=, !=
string
فقط برای بررسی اینکه آیا پوچ است یا نه
words
همه
integer
tag.id
همه
integer
با شناسه تگ های پست مطابقت دارد
tag.slug
=, !=
string
با راب تگ های پست مطابقت دارد
author.id
همه
integer
مشابه tag.id
author.slug
=, !=
string
مشابه tag.slug
/tags و /authors
id
همه
integer
slug
=, !=
string
post_count
همه
integer
created_at
همه
date
مقادیر تاریخ

در اینجا برخی از مقادیر معتبر برای کلیدهای تاریخ آورده شده است.

  • '2022-01-01'
  • 'yesterday'
  • 'first day of this year'
  • 'last day of next month'
  • '+1 day'
  • '-1 week'
  • 'next Thursday'
  • 1639655890 - مهر زمانی یونیکس

به عنوان مثال: در نقطه پایانی /posts ، می توانید از published_at>'-7 days' برای دریافت پست های منتشر شده در 7 روز گذشته استفاده کنید.

نمونه های فیلترینگ

توجه داشته باشید که هنگام فراخوانی API از طریق HTTP ، مقدار فیلتر باید با رمزگذاری URL باشد.

برای دریافت پست های نوشته شده توسط الکس:

// filter
author.slug=alex

// URL-encoded
/posts?filter=author.slug%3Dalex

برای دریافت پست های ویژه:

// filter
is_featured=true

// URL-encoded
/posts?filter=is_featured%3Dtrue

برای دریافت پست هایی با تگ audio یا video:

// filter
tag.slug=audio|tag.slug=video

// URL-encoded
/posts?filter=tag.slug%3Daudio%7Ctag.slug%3Dvideo

برای دریافت برچسب هایی که حداقل 5 پست دارند:

// filter
posts_count>=5

// URL-encoded
/tags?filter=posts_count%3E%3D5

برای دریافت نویسندگانی که بعد از ۱ ژانویه ۲۰۲۰ اضافه شده‌اند:

// filter
created_at>='2020-01-01'

// URL-encoded
/authors?filter=created_at%3E%3D%272020-01-01%27

برای دریافت پست های منتشر شده در 7 روز گذشته.

// filter
published_at>'-7 days'

// URL-encoded
/posts?filter=published_at%3E%27-7%20days%27

5. پارامتر sort

در اینجا لیستی از مقادیر مرتب سازی پشتیبانی شده وجود دارد. می‌توانید چندین مقدار را به‌عنوان مقادیر جداشده با کاما ترکیب کنید، که سپس به ترتیب مشابه ORDER BY در SQL اجرا می‌شوند.

نقطه پایانی
مرتب کردن
توضیحات
/posts پیش فرض published_at DESC
published_at
زمان انتشار پست
created_at
زمان ایجاد پست
updated_at
زمان ارسال آخرین به روز رسانی
id
شناسه پست
is_featured
این را به عنوان یک عدد صحیح، 1 برای درست و 0 برای نادرست در نظر بگیرید
title
بر اساس حروف الفبا
words
/tags و /authors پیش فرض posts_count DESC
post_count
تعداد پست های برچسب/نویسنده
created_at

روش مرتب سازی پیش فرض DESC است. در اینجا چند مثال برای پارامتر مرتب سازی آورده شده است.

  • published_at - مرتب شده توسط published_at به ترتیب نزولی
  • published_at ASC - مرتب شده توسط published_at به ترتیب صعودی
  • is_featured DESC ، published_at DESC - پست‌های ویژه ابتدا، سپس بر اساس زمان انتشار به ترتیب نزولی مرتب شدند. DESC اختیاری است. is_featured ، published_at با قبلی یکسان است.

6. پارامتر keys

از keys می توان برای گنجاندن یا حذف کلیدها از Objectها، مشابه GraphQL استفاده کرد. تمام نقاط پایانی از پارامتر keys پشتیبانی می کنند.

اگر نقطه پایانی /posts را با keys=id,content فراخوانی کنید، اشیاء پست فقط شامل آن دو کلید خواهند بود.

{
    "id": 1000,
    "content": "<p></p>"
}

از ! در ابتدا برای حذف برچسب ها استفاده کنید. به عنوان مثال، keys=!content,description content و description را از شی Post حذف می کند و تمام کلیدهای دیگر شامل می شود.

فرض کنید فقط می خواهید شناسه پست و شناسه برچسب پست ها را دریافت کنید. از keys=id,tags.id استفاده کنید. شما اشیایی مانند این دریافت خواهید کرد.

{
    "id": 1000,
    "tags": [
        {
            "id": 2000
        }
    ]
}

اشیاء

تمام مهرهای زمانی در قالب Unix Timestamp (عدد صحیح) هستند.

ارسال شی

{
    "id": 1000,

    "created_at": 1639655890,
    "updated_at": 1639655890,
    "published_at": 1639665890,

    "is_featured": false,
    "is_page": false,
    "slug": "hello-world",
    "content": "<p></p>",
    "title": "Hello World",
    "description": "This is a hello world page",
    "url": "https://blog.example.com/hello-world",
    "featured_image_url": "https://example.com/image.png",
    "canonical_url": null,
    "words": 500,
    "code_head": "",
    "code_foot": "",

    "language": language object,
    "variants": [ variant objects ],

    "tags": [ tag objects ],
    "tags_private": [ tag objects ],
    "authors": [ author objects ]
}
کلید
نوع
توضیحات
id
integer
یک شناسه منحصر به فرد برای پست
created_at
integer
زمان ایجاد پست
updated_at
integer
زمانی که پست یا داده های متا آن به روز شد
published_at
integer
زمان انتشار پست
is_featured
boolean
این که آیا پست برجسته است. ممکن است چندین پست برجسته در یک وبلاگ وجود داشته باشد
is_page
boolean
خواه یک صفحه باشد. ببینید پست ها و صفحات
slug
string
راب پست URL
url
string
URL مطلق پست، بر اساس محل میزبانی وبلاگ ایجاد شده است.
content
string
محتوای پست در HTML. برای مشاهده برچسب های پشتیبانی شده HTML به محتوای و ویرایشگر مراجعه کنید
title
string
عنوان پست، حداکثر طول 256
description
string | null
توضیحات (گزیده) پست، حداکثر طول 350، در صورت تنظیم نشدن، تهی است
featured_image_url
string | null
URL مطلق تصویر برجسته. اگر تنظیم نشده باشد، تهی است
canonical_url
string | null
URL مطلق یا تهی. اگر پست در جای دیگری منتشر شده باشد، Canonical URL توسط نویسنده تنظیم می شود.
words
integer
تعداد کلمات در محتوا
code_head
string
کد سفارشی برای اضافه کردن قبل از </head> . یک رشته خالی اگر چیزی تنظیم نشده باشد
code_foot
string
کد سفارشی برای اضافه کردن قبل از </body> . یک رشته خالی اگر چیزی تنظیم نشده باشد
language
object
variants
array
آرایه ای از اشیاء متفاوت
tags
array
مجموعه ای از عمومی اشیاء را برچسب گذاری کنید. تگ اصلی شاخص 0 است
tags_private
array
authors
array
آرایه ای از اشیاء نویسنده. نویسنده اصلی شاخص 0 است

در پست‌ها، ویژگی id در سطح جهانی در ویترو بلاگ منحصربه‌فرد است. ویژگی Slug در وبلاگ منحصر به فرد است.

شیء را تگ کنید

{
    "id": 2000,
    "created_at": 1639655890,
    "is_private": false,
    "name": "Hello World",
    "description": "Saying hello to the world",
    "slug": "hello-world",
    "url": "https://blog.example.com/tag/hello-world",
    "posts_count": 20,
    "code_head": null,
    "code_foot": "<p>some code</p>",

    "language": language object,
    "variants": [ variant objects ],
}
کلید
نوع
توضیحات
id
integer
شناسه منحصر به فرد برای برچسب
created_at
integer
زمان ایجاد برچسب
is_private
boolean
اینکه آیا برچسب خصوصی است. ببینید برچسب های خصوصی
name
string
نام (یا عنوان) برچسب
description
string | null
توضیحات برچسب
slug
string
URL اسلاگ تگ (مسیر پیش فرض کامل /tag/{slug} خواهد بود)
url
string
posts_count
integer
تعداد پست های برچسب
language
object
variants
array
آرایه ای از اشیاء متفاوت

شی نویسنده

نویسنده یک است کاربر که حداقل یک پست نوشته است

{
    "id": 3000,
    "created_at": 1639655890,
    "slug": "blogger",
    "url": "https://blog.example.com/author/blogger",
    "name": "Blogger",
    "picture_url": "https://example.com/image.png",
    "bio": "I am a blogger",
    "website_url": "https://example.com",
    "location": "France",
    "social": social media object,
    "posts_count": 32,

    "language": language object,
    "variants": [ variant objects ],
}
کلید
نوع
توضیحات
id
integer
یک شناسه منحصر به فرد برای نویسنده
created_at
integer
زمانی که نویسنده خلق شد
slug
string
URL اسلاگ نویسنده (مسیر پیش فرض کامل /author/{slug} خواهد بود)
url
string
کامل URL کاربر
name
string
نام نویسنده. حداکثر طول 50
picture_url
string | null
URL مطلق تصویر نویسنده. معمولاً یک تصویر مربع کوچک
bio
string | null
بیوگرافی نویسنده. حداکثر طول 256
website_url
string | null
URL مطلق وب سایت نویسنده
location
string | null
مکان نویسنده حداکثر طول 30
posts_count
integer
تعداد پست های نوشته شده توسط نویسنده
language
object
variants
array
آرایه ای از اشیاء متفاوت

شی وبلاگ

{
    "subdomain": "alex",
    "name": "My Blog",
    "description": "This is my blog hosted on ویترو بلاگ",
    "logo_url": "https://blog.example.com/media/logo.png",
    "icon_url": "https://blog.example.com/media/icon.png",
    "cover_url": "https://blog.example.com/media/cover.png",
    "url": "https://blog.example.com",
    "social": social media object,
    "nav_header": [
        {
            "name": "Home",
            "url": "/"
        },
        {
            "name": "About",
            "url": "/about"
        }
    ],
    "nav_footer": [
        {
            "name": "Privacy",
            "url": "/privacy"
        }
    ],

    "languages": [ language objects ],

    "code_head": "",
    "code_foot": "",

    "posts_count": 200,

    // the following are blog settings
    // which are used for generating header code, color themes
    // and footer branding
    "seo_indexing": true,
    "color_modes": "light",
    "color_mode_default": "light",

    // for cache busting
    "cache_version_styles": 1,
}
کلید
نوع
توضیحات
subdomain
string
زیر دامنه وبلاگ
name
string
نام/عنوان وبلاگ
description
string
شرح کوتاهی از وبلاگ (حداکثر 256)
logo_url
string | null
URL مطلق نماد وبلاگ. معمولاً یک تصویر مربع کوچک
cover_url
string | null
URL مطلق تصویر برجسته/ جلد
url
string | null
URL مطلق وبلاگ برای زبان فعلی
base_url
string
URL مطلق وبلاگ.
nav_header, nav_footer
array of objects
پیوندهای ناوبری برای سرصفحه و پاورقی وبلاگ.
languages
array of objects
تمام زبان های موجود وبلاگ. ببینید شیء زبان
code_head, code_foot
string
کد سفارشی HTML برای قبل از </head> و </body> برای همه صفحات.
posts_count
integer
مجموع پست های منتشر شده

شیء زبان

{
    "id": 1000,
    "code": "en",
    "name": "English",
    "is_primary": true,
    "direction": "ltr"
}
کلید
نوع
توضیحات
id
integer
یک شناسه منحصر به فرد برای زبان
code
string
کد زبان
name
string
نام زبان
is_primary
boolean
چه زبان اصلی وبلاگ باشد
direction
string
جهت متن. ltr یا rtl

شیء متغیر

یک شیء متغیر حاوی داده‌های یک نوع زبان یک پست، برچسب یا نویسنده است.

{
    "language": {
        "id": 1001,
        "code": "fr",
        "name": "French",
        "is_primary": false,
        "direction": "ltr"
    },
    "url": "https://blog.example.com/fr/hello-world"
}
کلید
نوع
توضیحات
language
object
url
string
URL از نوع

شی صفحه بندی

یک شی صفحه‌بندی در تمام نقاط پایانی چند شیء گنجانده شده است (/posts ، /authors ، /tags).

{
    "total": 100,
    "pages": 10,
    "limit": 5,
    "page": 1,
    "page_prev": null,
    "page_next": 2,
}
کلید
نوع
توضیحات
total
integer
تعداد کل نتایج ممکن با فیلترهای فعلی
pages
integer
تعداد کل صفحات صفحه بندی بر اساس محدودیتی که تعیین کرده اید. pages = round_to_upper(total/limit)
limit
integer
حد فعلی
page
integer
صفحه فعلی
page_prev
integer یا string
شماره صفحه قبلی (null در صورت عدم وجود صفحات قبلی)
page_next
integer یا string
شماره صفحه بعدی (در صورت عدم وجود صفحات بعدی null )

هدف رسانه های اجتماعی

{
    "facebook": null,
    "twitter": "https://twitter.com/HyvorBlogs",
    "linkedin": "https://www.linkedin.com/company/30240435",
    "youtube": null,
    "instagram": null,
    "github": "https://example.com/profile",
    "tiktok": null
}

رسیدگی به خطا

در صورت بروز خطا، کد وضعیت HTTP یک کد وضعیت غیر 200 خواهد بود.

برای خطاهای 4xx، پاسخ یک شی JSON خواهد بود.

{
    "error": "ID is required",
    "error_code": "422"
}

این کدهای HTTP ممکن است:

  • 404 یافت نشد - منبع یافت نشد - 404 را می توان در نقاط پایانی تک شی برگرداند زمانی که شی پیدا نشد - مطمئن شوید که ID/Slug (و زبان پست‌ها) درست است
  • 422 موجودیت غیرقابل پردازش - ورودی نامعتبر
    • پارامترهای پرس و جو را بررسی کنید
    • جزئیات بیشتر را می توانید در خروجی JSON خطا پیدا کنید

خطاهای 5xx به این معنی است که چیزی از طرف ما اشتباه است. ما را بررسی کنید صفحه وضعیت برای هر خرابی اگر مشکل ادامه پیدا کرد، با ما تماس بگیرید.

صفحات

ما نقطه پایان جداگانه ای برای واکشی نداریم صفحات.

  • برای دریافت یک صفحه، با شناسه صفحه یا اسلاگ با نقطه پایانی /post تماس بگیرید.
  • برای دریافت چندین صفحه، نقطه پایانی /posts را با پارامتر ?pages=true تماس بگیرید.
  • /posts/search از صفحات جستجو پشتیبانی نمی کند.