#P1716
POST /v2/articles/{id}/views
Article: Increment Views
این اندپوینت وظیفه افزایش شمارنده بازدید یک مقاله خاص را بر عهده دارد.
این متد معمولاً زمانی فراخوانی میشود که کاربر وارد صفحه جزئیات مقاله (Single Page) میشود. عملیات افزایش بازدید به صورت مستقیم روی دیتابیس (Atomic) انجام شده و تعداد جدید بازدیدها بلافاصله برگردانده میشود.
Request Overview
URL:
/v2/articles/{id}/viewsMethod: POST
Controller: ArticleController@incrementViews
Middleware: authWithJwt
Access Control
- نیاز به توکن احراز هویت (JWT) دارد (طبق تعریف گروه Middleware).
Path Parameters
| Parameter | Type | Description |
|---|---|---|
| id | integer | (الزامی) شناسه منحصربهفرد مقاله (Article ID) که در آدرس URL قرار میگیرد. |
Logic Details
روند پردازش به شرح زیر است:
- جستجوی رکورد (Find or Fail):
- از متد
Article::findOrFail($id)استفاده میشود. - اگر مقالهای با این شناسه وجود نداشته باشد، لاراول به صورت خودکار یک خطای 404 Not Found استاندارد پرتاب میکند و ادامه کد اجرا نمیشود.
- از متد
- افزایش اتمیک (Atomic Increment):
- از متد
increment('views')استفاده میشود. - این دستور مستقیماً یک کوئری
UPDATE articles SET views = views + 1 WHERE id = ...به دیتابیس ارسال میکند. این روش از Race Condition جلوگیری کرده و پرفورمنس بالایی دارد (نیازی به خواندن، ویرایش در PHP و ذخیره مجدد نیست).
- از متد
- بازگشت پاسخ:
- تعداد بازدیدهای جدید (آپدیت شده) همراه با برچسب زمان بازگردانده میشود.
Response Structure
پاسخ موفق (200 OK)
{
"status": true,
"time": 1715006000,
"views": 1543 // تعداد بازدید جدید پس از افزایش
}
خطای یافت نشد (404 Not Found)
اگر شناسه مقاله در دیتابیس موجود نباشد (توسط findOrFail):
{
"message": "No query results for model [App\\Models\\Article] 9999"
// یا ساختار استاندارد خطای لاراول بسته به تنظیمات Exception Handler
}
Flowchart
Start Request
↓
Find Article (findOrFail)
↓
Exists?
No
Return 404
↓ Yes
Increment DB Column
UPDATE `views` = `views` + 1
UPDATE `views` = `views` + 1
↓
Return JSON
(New View Count)
(New View Count)