تفاوت بین متدهای HTTP شامل GET, POST, PUT, PATCH, DELETE

13 اسفند 1395
crud-http

متدهای HTTP به عنوان یک رابط واحد برای دسترسی و ارسال اطلاعات به منابع مورد استفاده قرار می‌گیرند. معمول‌ترین متدهای موجود در پروتکل‌های HTTP عبارتند از:‌ POST, GET, PUT, PATCH و DELETE.

این متدها به ترتیب برای ساختن (Create)، خواندن (Read)، بروزرسانی (Update) و حذف کردن (Delete) مورد استفاده قرار می‌گیرند.

به مجموعه‌ی عملیات‌های ساختن، خواندن، بروزرسانی و حذف کردن، عملیات CRUD گفته می‌شود که C مخفف Create، حرف R مخفف Read، حرف U مخفف Update و در نهایت حرف D مخفف Delete می باشد.

علاوه بر متدهای فوق، دو متد OPTION و HEAD وجود دارند که از آنها استفاده‌ی چندانی در سطح وب نمی‌شود.

جهت دستیابی به یک دید کلی در جدول زیر مقادیری که هر یک از متدهای HTTP باز می‌گردانند نمایش داده شده است:

متدهای HTTP          CRUD                مثال
==============       =============       =================================
POST                 Create              Link to /customers/{id} شامل ID جدید
GET                  Read                نمایش لیستی از مشتریان، صفحه بندی 
PUT                  Update/Replace      جایگزین کردن هر اسمی درون لیست مشتریان
PATCH                Update/Modify       ویرایش کردن یک نام از لیست تمام مشتریان
DELETE               Delete              حذف کردن نام یک مشتری و یا مشتریان

متدهای http و CRUD

متد POST

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

مثال:

Path : /users
Method: POST
Body :
{  
   "username":"masoud",
   "email":"masoud@roxo.ir"
}
===============================
Example:
POST http://www.roxo.ir/users
POST http://www.example.com/users/username

این مثال یک کاربر جدید با نام کاربری masoud‌ و ایمیل masoud@roxo.ir با id = ۱ را ایجاد می‌کند.

متد GET

این متد برای خواندن اطلاعات یک منبع ( نه تغییر آنها) بکار گرفته می‌شود. گاهی این متد برای بازگردانی اطلاعاتی به فرمت XML یا JSON نیز کاربرد دارد. بنابراین هنگامیکه از این متد استفاده می‌شود، داده‌ها کاملا امن هستند و این امر ریسک استفاده از این متد را فقط و فقط برای خواندن اطلاعات بسیار پایین میاورد. همچنین بدیهی‌ست که اگر یک درخواست مشابه در چندین زمان متفاوت به متد GET‌ ارسال شود، پاسخی مشابه دریافت خواهیم کرد.

مثال:

Path : /user/1
Method: GET
Body :
{  
   "id":1,
   "username":"masoud",
   "email":"masoud@roxo.ir"
}
===============================
Example:
GET http://www.example.com/users/masoud
GET http://www.example.com/users/1
GET http://www.example.com/users/list

متد PUT

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

مثال زیر را در حالتی ارائه می‌دهیم که تمام فیلد‌ها وجود دارند:

Path : /user/1
Method: PUT
Body :
{ 
   "id":1,
   "username":"masoud_updated",
   "email":"masoud_updated@roxo.ir"
}

با اعمال مثال بالا، فیلد نام کاربری و ایمیل تغییر می‌کند. و اما مثال بعدی:

Path : /user/1
Method: PUT
Body :
{ 
   "id":1,
   "email":"masoud_updated@roxo.ir"
}

با اعمال متد PUT برای مثال فوق تنها ایمیل تغییر می‌کند و مقدار نام کاربری در دیتابیس به صورت null ذخیره می‌گردد. و اگر متد GET را جهت خواندن مثال فوق اعمال کنیم با خروجی زیر مواجه خواهیم شد:

Path : /user/1
Method: GET
Body :
{
   "id":1,
   "username":null,
   "email":"masoud_updated@roxo.ir"
}

متد PATCH

این متد روشی دیگر برای آپدیت و بروزرسانی رکوردها می‌باشد با این تفاوت که پس از ارسال درخواست، تنها فیلدهایی که دارای مقادیر هستند تغییر می‌کنند و سایر فیلدها به قوت خود باقی می‌مانند. مثلا فرض کنید یک رکورد با نام کاربری و ایمیل در پایگاه داده‌ی خود ذخیره کرده‌اید و حال قصد بروزرسانی آن با متد PATCH را دارید. اگر فیلد نام کاربری را پر کنید و ایمیل را خالی بگذارید و سپس درخواست را ارسال کنید، تنها مقدار فیلد نام کاربری در پایگاه داده تغییر می‌کند و مقدار فیلد ایمیل تغییر نخواهد کرد.

مثال زیر را در حالتی که تمام فیلدها دارای مقدار هستند، ارائه می‌دهیم:

Path : /user/1
Method: PATCH
Body :
{ 
   "id":1,
   "username":"masoud_updated",
   "email":"masoud_updated@roxo.ir"
}

با اعمال متد PATCH در مثال بالا تمام فیلدهای نام کاربری و ایمیل بروزرسانی می‌شوند و اما مثال بعدی:

Path : /user/1
Method: PATCH
Body :
{ 
   "id":1,
   "email":"masoud_updated@roxo.ir"
}

پس از ارسال درخواست مثال فوق تنها فیلد ایمیل تغییر می‌کند و فیلد نام کاربری مقداری برابر masoud_updated (همان مقدار قبلی) دارد. اگر از متد GET‌ برای نمایش مثال فوق استفاده کنیم با خروجی زیر مواجه خواهیم شد:

Path : /user/1
Method: GET
Body :
{
   "id":1,
   "username":masoud_updated,
   "email":"masoud_updated@roxo.ir"
}

متد DELETE

ساده‌ترین متد پروتکل HTTP، متد DELETE می‌باشد که با ارسال این درخواست درکورد موردنظر برای همیشه از پایگاه داده حذف خواهد شد.

نویسنده شوید

دیدگاه‌های شما (8 دیدگاه)

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.

amiremperor
30 اردیبهشت 1400
سلام . ممنون از اطلاعات مفیدتون

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.

abbas
03 خرداد 1399
"بنابراین هنگامیکه از این متد استفاده می‌شود، داده‌ها کاملا امن هستند و این امر ریسک استفاده از این متد را فقط و فقط برای خواندن اطلاعات بسیار پایین میاورد". این متن برای متد get اشتباه هست.

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.

محمد
11 شهریور 1398
در مورد متد get به نظرم امنیت پایینی داره چون ما به محتوا http دسترسی داره و میتونیم راحت به محتوای دگ دسترسی داشتع باشیم

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.

محمد
24 بهمن 1397
ممنونم دوست خوبم

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.

ابوالفضل
20 آذر 1397
عالی ممنون از سایت خوبتون

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.

عباس
25 آبان 1397
خیلی متشکرم کلا سایت خوبی دارین و مقالاتتون خیلی بدردم خورده خدا امواتتون رو بیامرزه

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.

حسن افشار
23 آبان 1397
مرسی بابت مطلب خوبتون

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.

سارا
06 فروردین 1397
بسیار عالی

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.