لوگو عباس اویسی

متولد تهران، توسعه دهنده‌ی اندروید، پیگیر فوتبال. ارشد نرم افزار و علاقمند به جنبه‌های مختلف توسعه‌ی نرم افزار

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

استاندارد JSON Schema

شهریور ۵, ۱۳۹۸

مهدی نوری توی پرسش و پاسخ ارائه‌اش در irlogcat یه اشاره کوچیکی به Json Schema کرد، دیروز در موردش سرچ کردم و فهمیدم یکی از چالش‌هایی که خودمون با تعریف قرارداد بین کلاینت و سرور حل میکردیم رو با تعریف استاندارد حل کردن.😃

اگر توسعه‌دهنده‌ی موبایل باشید یا برای کلاینت‌ها وب‌سرویس نوشته باشید، احتمالا درگیر فرم‌های داینامیک شدید. بطور مثال توی پروژه‌های املاک در موقع ثبت ملک، اطلاعاتی که کاربر وارد میکنه براساس نوع ملک تغییر می‌کنه. مثال دیگه پروژه‌های ثبت آگهی هستند، براساس اینکه کاربر چه دسته‌بندی رو انتخاب میکنه، باید اطلاعات متفاوتی رو در مورد آگهی بنویسه. حالا وقتی کاربر روی دکمه‌ی ثبت میزنه، کلاینت باید اطلاعات کاربر رو بصورت جیسان به سرور بفرسته تا در اونجا ثبت بشن.

اینکه اون جیسان باید چه فیلدهایی داشته باشه، ولیدیشن‌شون چطور باشه، تایپ‌ فیلدها چی باشه و … رو باید یه جوری مشخص کرد تا کلاینت بفهمتش و ازش توی ساخت جیسان کمک بگیره🤕. ما خودمون برای حل این مشکل بین کلاینت و سرور یه سری قرارداد تعریف میکردیم که کلاینت بتونه لیست فیلدهای فرم رو در از یه URL بگیره، کنار هر فیلد مشخص شده تایپش چیه و از چه RegEx برای ولیدیشنش باید استفاده بشه و …

حالا با وجود JSON Schema دیگه میشه بصورت استاندارد اینکارو کرد و schema جیسان رو از طریق یه جیسان دیگه تعریف کرد. یجورایی میتونید باهاش برای جیسان‌هاتون داکیومنت بنویسید! جیسان زیر رو در نظر بگیرید:

JavaScript
1
2
3
4
5
6
{
  "productId": 1,
  "productName": "A green door",
  "price": 12.50,
  "tags": [ "home", "green" ]
}

الان کلاینت از روی این نمیتونه بفهمه که توی جیسان کدوم فیلدها اجباریه، تایپ productId چیه یا … ، ولی با استفاده از Json Schema یه همچین چیزی میشه درست کرد که کلاینت اطلاعات کاملتری از فیلدها داشته باشه:

JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
{
...
"title": "Product",
"description": "A product from Acme's catalog",
"type": "object",
"properties": {
"productId": {
"description": "The unique identifier for a product",
"type": "integer"
}
},
"required": [ "productId" ]
}

مثلا تایپ productId از نوع Integer هست و حتما باید جیسانی که به سرور میره productId رو داشته باشه.

توی سایتش اطلاعات خیلی بیشتری میتونید پیدا کنید:

https://json-schema.org

برای یادگیریش هم از این لینک استفاده کنید، همین مثال Productیی که نوشتمو توی این لینک خیلی کامل توضیح داده:

https://json-schema.org/learn/getting-started-step-by-step.html