ریسورس دریافت اطلاعات رویداد با اسلاگ - نسخه ۲
سلام
دلیل ایجاد این ریسورس با اینکه ریسورس ای برای گرفتن اطلاعات رویداد داشتیم، یه سر از ضعف های موجود در نسخه قبلی بود.
در نسخه قبلی در صورتی که اسلاگ رویدادی عوض می شد، خطای ۴۰۴ می داده و اینکه اشاره به اسلاگ جدید می کرد که رویداد با آدرس جدید گرفته بشه.
تفاوت نسخه جدید در اینه که بجای خطای ۴۰۴، کد ۳۰۱ به منظور انتقال ریسورس به آدرس جدید می ده و آدرس ریسورس جدید هم در هدر با Location تعیین می شه.
در نسخه جدید، در اصل وقتی درخواستی به اسلاگ قدیمی رویداد زده بشه، بجای اینکه خطا بده، redirect می کنه به آدرس جدید.
در اصل برنامه ها یا کتابخانه هایی که باهاشون برای ارسال درخواست استفاده می کنیم، معمولا خودشون این مسئله redirect رو هندل می کنن و برنامه نویس نیاز به درگیری خاصی نخواهد بود. مثل fetch که بروبچ خودمون برای دریافت اطلاعات استفاده می کنن که خودش این مسئله redirect رو هندل می کنه.
اگرم کلاینت براش مهم باشه که آدرس جدید در مرورگر به کاربر نشان بده، می تونه اسلاگی که درخواست کرده بود رو با اسلاگ رویداد دریافتی مقایسه و در صورت مغایرت می تونه کاربر رو به آدرس جدید ارسال کنه و این مسئله تغییر آدرس از طریق آدرس بار مرورگر مشخص شه.
دلیل اصلی ایجاد این ریسورس اپ کانکت بود. به دلیل اینکه بخاطر نیاز های جدید برای اپ کانکت، تصمیم بر این شد که اپ ها به بصورت مستقیم به رویدادی مشخص نشن و عمل تشخصی رویداد توسط API ای که مختص اپ کانکت زده می شه تعیین شه. در نتیجه اتفاقی که می افته اینه که اپ کانت صرفا می گه رویدادم رو بده ولی اشاره ای به رویدادی نمی کنه و رویدادش رو می گیره.
از آنجایی هم که API جدید، نیاز داره اطلاعات رویداد رو تحویل بده، بجای اینکه متسقیم درگیر نگهداری اطلاعات رویداد بشه، صرفا از آدرس رویداد خبر داره و به آدرس رویداد در API اصلی ایوند اشاره و بهش redirect می کنه.
البته این مسئله رو می شد با آی دی رویداد هم حل کرد که ثابت هست و نیازی به این کار ها نباشه. ولی خوب از آنجایی که ای دی رویداد یه عدد هست و آی دی رویداد اطاعاتی رو به بیرون درز می کنه. از جمله اینکه چند تا رویداد داریم و اینکه می شه اسکریپتی نوشت که به ترتیب رویدادها رو از سرور بگیره و ذخیره کنن و کارهاش شوم دیگر :)
خوب دیگه قصه بس است. برای گرفتن رویدادی به این شیوه عمل می کنیم:
GET http://api.evand.abc/v2/events/{EventSlug}
{
"data": {
"id": 1610,
"address": "تسskss",
"name": "تست",
"cover": null,
"slug": "testasli",
"start_date": "2018-12-23T19:00:00+0330",
"end_date": "2018-12-23T20:30:00+0330",
"latitude": 35.74076722,
"longitude": 51.44743898,
"city": {
"name": "تهران"
},
"organization": {
"name": "1002",
"logo": "http:\/\/static.evand.abc\/images\/organizations\/logos\/original\/2ce3bb683fdd280d73d60eb0638f5936.jpg",
"socials": []
}
}
}
اطلاعاتی که از ریسورس مربوطه برگشت داده می شه همین هاست. فعلا اینا نیازهای موبایل بوده و اگر کلاینت دیگری نیازی به اطلاعات دیگری داشته باشه، اطلاع بدین، دیتاهای مربوطه اضافه می شه.
توجه کنین که هیچ گونه نیازی به include و این چیزها نیست و همه چیز بصورت پیش فرض لود می شه.
چیزی مثل fields هم برای فیلتر برخی فیلدها در این ریسورس نداریم. در صورت نیاز به همچین چیزی لطفا اطلاع بدید که راه حلی براش لحاظ شه.
فقط توجه کنید که برای اطلاع از تغییر اسلاگ می تونید status code رو بررسی کنید، و یا اسلاگ درخواستی با اسلاگ برگشتی هم برای این منظور می شه استفاده کرد.
به عنوان مثلا وقتی اسلاگی تغییر کنه، و درخواست اطلاعت رویداد بدید این اتفاق می افته:
GET http://api.evand.abc/v2/events/anOldSlug
Status Code: 301
Response Headers:
Location: http://api.evand.abc/v2/events/a_new_sexy_slug
Payload:
{
"data": {
...
"slug": "a_new_sexy_slug",
...
}
}
نظرات