آموزشآموزش شبکه به زبان ساده

درس ۹۴ از ۹۹، شبکه و اینترنت، حدود ۱۲ دقیقه خواندن

API، REST و JSON برای شبکه

جواب کوتاه

API راهی است که برنامه‌ها با هم حرف بزنند، با پرسش و جوابی که شکل ثابت دارد؛ خط فرمان برای آدم است و API برای برنامه. JSON قالب متنی رایج این پرسش و جواب‌هاست، با شیء، آرایه، رشته، عدد، درست و نادرست، و null. REST سبکی است که روی HTTP پنج کار را با پنج فعل می‌گوید: GET گرفتن، POST ساختن، PUT جایگزینی کامل، PATCH عوض کردن یک بخش، DELETE برداشتن؛ و جواب با کدی مثل 200 یا 404 می‌آید. تجهیزات شبکه با RESTCONF همین کار را روی HTTPS می‌کنند.

نام

API کوتاه‌شده‌ی Application Programming Interface است، یعنی رابط برنامه‌نویسی: راهی که یک برنامه با برنامه‌ی دیگر حرف بزند، با پرسش و جوابی که شکلش از پیش معلوم است.

«API» در نفت و روغن موتور و دارو هم معنای دیگری دارد؛ این‌جا منظور رابط نرم‌افزار است. تجهیزات شبکه‌ی امروزی، کنار خط فرمان، API هم دارند تا برنامه‌ها، مثل Ansible که در درس خودکارسازی دیدید، مستقیم با آن‌ها حرف بزنند.

فرم سفارش قنادی

فرض کنید کیک تولد سفارش می‌دهید. دو راه دارید:

سفارش با حرف: هر قناد آن را به زبان خودش می‌فهمد؛ برای آدم خوب است، برای کار تکراری و دقیق نه.
فرم چاپی: خانه‌ها ثابت‌اند و هر خانه یک چیز؛ هر کسی پرش کند، قنادی همان را می‌فهمد.

سفارش با حرف همان خط فرمان است: برای آدم ساخته شده. فرم چاپی همان API است: خانه‌های ثابت، با نام هر خانه، و جوابی که آن هم شکل ثابت دارد.

چرا API

  • خط فرمان برای آدم استخروجی‌اش متنی است که آدم می‌خواند؛ برنامه باید آن را تکه‌تکه کند و با هر نسخه‌ی تازه ممکن است شکلش عوض شود.
  • API برای برنامه استپرسش و جواب شکل ثابتی دارند، با نام هر خانه؛ برنامه همان را که می‌خواهد برمی‌دارد.

JSON

JSON کوتاه‌شده‌ی JavaScript Object Notation است: قالبی متنی و سبک برای نوشتن داده، که هم آدم می‌خواند و هم هر زبان برنامه‌نویسی. نامش از یک زبان آمده، ولی به هیچ زبانی وابسته نیست. همان فرم سفارش، به JSON:

JSON چهار نوع ساده دارد: رشته (متن در گیومه)، عدد، درست و نادرست (true و false)، و null یعنی خالی. و دو نوع ساختاری: شیء، که میان {} نام‌ها و مقدارها را نگه می‌دارد، و آرایه، که میان [] فهرستی مرتب است. پرونده‌اش پسوند .json دارد.

REST

REST کوتاه‌شده‌ی Representational State Transfer است، سبکی برای ساختن API که روی فیلدینگ در سال ۲۰۰۰ در رساله‌ی دکتری‌اش نوشت. فکرش ساده است: هر چیز یک نشانی دارد، مثل نشانی یک صفحه‌ی وب، و با فعل‌های همان HTTP روی آن کار می‌کنید. هر درخواست هم خودش کامل است؛ سرور لازم نیست درخواست قبلی را یادش بماند.

«REST API» یعنی API‌ای که به همین سبک ساخته شده است.

پنج کار

پنج کاری که با یک سفارش، یا با یک تنظیم روتر، می‌شود کرد:

  • GET: پرسیدن«سفارش من در چه حال است؟» چیزی عوض نمی‌شود.
  • POST: سفارش تازهفرم تازه پر می‌کنید؛ چیزی ساخته می‌شود.
  • PUT: عوض کردن کل سفارشفرم کامل تازه به‌جای فرم قبلی.
  • PATCH: عوض کردن یک خانهفقط نوشته‌ی روی کیک عوض شود؛ بقیه همان.
  • DELETE: لغوسفارش برداشته شود.

کدهای جواب

جواب هر درخواست با یک عدد سه‌رقمی شروع می‌شود، همان کدهای HTTP؛ مثل جواب قنادی: «آماده است»، «ثبت شد»، «چنین سفارشی نداریم»:

کدیعنی
200 OKدرست انجام شد؛ جواب همراهش است
201 Createdچیز تازه‌ای ساخته شد
204 No Contentانجام شد؛ جوابی برای فرستادن نیست
401 Unauthorizedاول خودتان را معرفی کنید
404 Not Foundچنین چیزی نیست

کدهایی که با ۲ شروع می‌شوند یعنی موفق، و با ۴ یعنی ایراد از درخواست.

RESTCONF برای شبکه

RESTCONF استانداردی است که همین سبک را برای تجهیزات شبکه می‌آورد: پروتکلی روی HTTP، که تنظیمات روتر و سوییچ را به شکل داده نشان می‌دهد. هر بخش تنظیم یک نشانی دارد که با /restconf/data شروع می‌شود، و همان پنج فعل روی آن کار می‌کنند. شکل داده‌ها را مدل‌هایی به نام YANG تعریف می‌کنند، و جواب می‌تواند JSON باشد.

GET https://192.168.1.1/restconf/data/ietf-interfaces:interfaces
Accept: application/yang-data+json

این درخواست فهرست درگاه‌های روتر را می‌خواهد، به JSON. همان چیزی است که با show در خط فرمان می‌دیدید، ولی این بار برای برنامه.

یک گفت‌وگوی کامل

برنامه‌ی شما می‌پرسد و روتر جواب می‌دهد:

اگر بخواهید توضیح یک درگاه را عوض کنید، همان نشانی را با PATCH و یک JSON کوچک می‌فرستید که فقط توضیح را دارد؛ بقیه‌ی تنظیم دست نمی‌خورد. این درخواست‌ها روی HTTPS می‌روند و نام کاربری و رمز می‌خواهند.

سه اشتباه

  • «GET را برای تغییر هم به کار می‌برم.»GET فقط برای گرفتن است و چیزی را عوض نمی‌کند؛ برای ساختن POST، برای جایگزینی PUT، برای عوض کردن یک بخش PATCH.
  • «PUT و PATCH یکی‌اند.»PUT کل چیز را با آنچه می‌فرستید جایگزین می‌کند؛ اگر یک خانه را جا بیندازید، ممکن است پاک شود. PATCH فقط همان را که می‌فرستید عوض می‌کند.
  • «API است، پس رمز و HTTPS نمی‌خواهد.»API همان قدرت خط فرمان را دارد؛ هر کس به آن برسد، دستگاه را عوض می‌کند. پس با HTTPS و فقط با اجازه.

جمع‌بندی. آنچه از این درس با خودتان می‌برید.

  • API: پرسش و جواب با شکل ثابت، برای برنامه.
  • JSON: شیء {}، آرایه []، رشته، عدد، درست و نادرست، null.
  • REST: GET، POST، PUT، PATCH، DELETE روی HTTP.
  • کد جواب: 200، 201، 204، 401، 404.
  • RESTCONF: همین کار برای روتر و سوییچ.
  • API هم رمز و HTTPS می‌خواهد.

خودتان را بسنجید

۱۵ پرسش، هر بار تازه از میان ۳۰ پرسش این درس. آخر آزمون فقط کارنامه را می‌بینید: چند درست، چند نادرست.

خودتان را بسنجید

۱۵ پرسش

  • هر بار پرسش‌ها و ترتیب گزینه‌ها تازه است.
  • تا آخر، درست یا نادرست بودن جواب‌ها گفته نمی‌شود؛ می‌توانید برگردید و جوابی را عوض کنید.
  • آخرش کارنامه می‌گیرید: چند پرسش درست و چند نادرست.
  • هر وقت بستید، دوباره که باز کنید از همان‌جا ادامه می‌دهید.

فصل‌های این درس

درس بعد