در توسعهٔ RESTful API از کدهای وضعیت (Status Codes) پروتکل اچتیتیپی به عنوان بخشی از ریسپانس استفاده میشود و این در حالی است که در این پروتکل چیزی در حدود ۴۰ کد وضعیت داریم که در ۵ گروه مختلف تقسیمبندی میشوند که عبارتند از:
- گروه 1xx: این گروه از کدها صرفاً اطلاعاتی را در اختیار کلاینت میگذارند.
- گروه 2xx: این گروه از کدها حاکی از آنند که درخواست کلاینت با موفقیت انجام پذیرفته است.
- گروه 3xx: این گروه از کدها نشانگر آن هستند که کلاینت به منظور تکمیل ریکوئست، میباید اقدام دیگری انجام دهد.
- گروه 4xx: این گروه از کدها از وجود اروری در سمت کلاینت خبر میدهند.
- گروه 5xx: این گروه از کدها حاکی از وجود مشکلی در سمت سرور هستند.
آشنایی با کاربرد برخی از کدهای وضعیت گروه 2xx
کد وضعیت 200 با پیام OK این پیام را میرساند که تَسک مد نظر با موفقیت تکمیل شده است و لازم به یادآوری است که ریسپانسی از جنس ۲۰۰ بسته به اینکه از چه متد اچتیتیپی استفاده شده باشد، میتواند Body مختلفی داشته باشد. همچنین اگر نخواهیم محتوایی در Body ریترن شود، میباید از کد وضعیت ۲۰۴ با پیام No Content استفاده نماییم. در واقع، کد وضعیت 204 معمولاً در پاسخ به درخواستی از جنس POST
،Put
و DELETE
ارسال میگردد.
زمانی که در سمت سرور یک ریسورس جدید ایجاد گردد، باید کد وضعیت ۲۰۱ با پیام Created را در نظر گرفت اما این در حالی است که اگر تَسک مربوطه فوراً اتفاق نیفتد و سرور برای تکمیل آن نیاز به زمان بیشتری داشته باشد، باید از کد ۲۰۲ با پیام Accepted استفاده کرد. به عبارتی، کد ۲۰۲ حاکی از آن است که ریکوئست برای پردازش پذیرفته شده است اما پروسهٔ پردازش به دلیل طولانی بودن تکمیل نشده است (این کد در عملیاتی از جنس اصطلاحاً Asynchronous کاربرد دارد به طوری که این امکان در اختیار سرور قرار میگیرد تا ریکوئستهایی به منظور انجام تَسکهای دیگری را پذیرا باشد.)
آشنایی با کاربرد برخی از کدهای وضعیت گروه 3xx
کد وضعیت ۳۰۱ با پیام Moved Permanently نشانگر آن است که ریسورس مد نظر به مکان جدیدی منتقل شده است و این در حالی است که در هِدِری از جنس Location
میباید URI جدید ذکر شود. همچنین کد وضعیت 307 با پیام Temporary Redirect در مواقعی کاربرد دارد که بخواهیم به صورت موقف کلاینت را به مسیر دیگری ریدایرکت کنیم.
آشنایی با کاربرد برخی از کدهای وضعیت گروه 4xx
کد وضعیت 400 با پیام Bad Request نشانگر این مسئله است که در سمت کلاینت مشکلی وجود دارد که این مشکل میتواند به دلیل سینتکس اشتباه، پارامترهای نامعتبر در ریکوئست و چیزهایی از این دست باشد و این در حالی است که کلاینت بدون رفع مشکل ایجادشده نمیباید مجدد درخواست خود را ارسال کند.
کد وضعیت 401 با پیام Unauthorized حاکی از آن است که کلاینت درخواست انجام عملیاتی روی ریسورسی را دارا است که نیازمند مثلاً پسورد است اما کلاینت از چنین پسوردی برخوردار نیست و کد وضعیت 403 با پیام Forbidden نیز مرتبط با این موضوع است که ریکوئست به درستی ارسال شده است اما سرور از عملی کردن آن سر باز میزند زیرا مثلاً کلاینت از پرمیشن لازم برای دسترسی به آن ریسورس برخوردار نیست و تفاوتش با کد 401 در این است که در کد 401 با اضافه کردن مثلاً پسورد درست مشکل حل میشود اما وقتی که کد وضعیت 403 باشد، منظور آن است که حتی اگر پسورد هم درج شود، در سمت سرور پرمیشنهای لازم برای دسترسی به ریسورس مذکور وجود ندارند.
یکی از معروفترین کدهای وضعیت متعلق به گروه 4xx کد وضعیت 404 با پیام Not Found است که نشان میدهد ایپیآی نمیتواند در سمت سرور ریسورسی با آدرسی که از سمت کلاینت آمده بیابد.
کد وضعیت 405 با پیام Method Not Allowed نیز در مواقعی به کار گرفته میشود که کلاینت در تلاش است تا یک متد اچتیتیپی را به کار گیرد که در سمت سرور مجاز نیست. به طور مثال، یک ریسورس به اصطلاح Read-only فقط متدهای GET
و HEAD
را ساپورت میکند و چنانچه متدی همچون PUT
یا DELETE
را در ارتباط با آن ریسورس به کار گیریم، با کد 405 مواجه خواهیم شد.
کد وضعیت 406 با پیام Not Acceptable نشان میدهد که سرور قادر به تولید فرمت مد نظر کلاینت که در هِدِر Accept
درج شده نمیباشد. برای مثال، چنانچه کلاینت درخواست فرمتی در قالب application/xml
را داشته باشد اما سرور فقط و فقط فرمتی در قالب application/json
را عرضه کند، با کد وضعیت 406 مواجه خواهیم شد.
گاهی کلاینت یکسری شروط برای سرور در نظر میگیرد که فقط در صورت برآورده شدن آنها ریکوئست باید عملی گردد که در چنین شرایطی اگر آن شرایط برآورده نگردند، کد وضعیت 412 با پیام Precondition Failed ارسال خواهد شد.
آشنایی با کاربرد برخی از کدهای وضعیت گروه 5xx
کد وضعیت 500 با پیام Internal Server Error معمولاً زمانی رخ میدهد که در سمت اپلیکیشن یک اِکسپشن رخ میدهد و حاکی از آن است که مشکل بوجود آمده کاملاً بر عهدهٔ سرور است و کلاینت هیچ تقصیری ندارد! همچنین کد وضعیت 501 با پیام Not Implemented حاکی از آن است که به هر دلیلی ریکوئست ارسالی قابلانجام نمیباشد.
HTTP Status Codes وبسایتی حاوی لیست کاملی از کلیهٔ کدهای وضعیت است که میتواند به عنوان مرجعی جامع مورد استفاده قرار گیرد که علاوه بر معرفی کدهای وضعیت، با کلیک بر روی هر یک از آنها، توضیحاتی نیز در مورد ماهیتشان آورده شده است.