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 میخواهد.
خودتان را بسنجید
۱۵ پرسش، هر بار تازه از میان ۳۰ پرسش این درس. آخر آزمون فقط کارنامه را میبینید: چند درست، چند نادرست.