Perbedaan PATCH dan PUT dan HTTP method lainnya di API HTTP

| | | Artikel, Laravel, Express JS
Perbedaan PATCH dan PUT dan HTTP method lainnya di API HTTP

Memahami penggunaan method atau verb di protokol HTTP itu penentuan jenis aksi yang dilakukan oleh request. ada beberapa method yang didukung HTTP:

  • GET : meminta resource dari server.
    • cocok untuk meminta data, mengambil file, atau filter data lewat query URL
    • data yang dikirim lewat query URL, tidak punya body
    • tidak cocok untuk login di browser karena data kredensial terlihat di URL
  • POST : menyimpan resource baru ke server.
    • dipakai untuk Login, mengirim data baru, atau upload file
  • PUT : meng-update resource, tapi mengganti data secara keseluruhan (replace total)
  • PATCH : meng-update resource secara parsial, hanya field yang dikirim saja yang berubah
  • DELETE : menghapus resource dari server
    • form HTML biasa cuma bisa GET dan POST, jadi PUT/PATCH/DELETE harus lewat fetch, AJAX, cURL, atau Postman

Perbedaan utama PUT dan PATCH

PUT dan PATCH sama-sama dipakai untuk update, tapi beda cara kerjanya:

  • PUT menimpa resource dengan data baru secara keseluruhan. kalau request PUT hanya mengirim name, field lain seperti hoby akan hilang/bernilai kosong karena di-replace total
  • PATCH mengubah hanya field yang dikirim. field lain tetap aman tidak tersentuh

contoh request PUT yang mengirim data lengkap:

{
  "name": "Sigit N",
  "hoby": "Drawing"
}

sedangkan PATCH cukup kirim field yang mau diubah saja, misalnya cuma name:

{
  "name": "Sigit Foo Bar"
}

Jadi intinya : kalau mau update satu field saja, pakai PATCH biar data lain tidak ketimpa. kalau memang mau menimpa seluruh data, pakai PUT.

Contoh penggunaan HTTP method dengan cURL

berikut contoh cURL untuk GET, POST, PATCH, PUT, dan DELETE pada endpoint task-schedule:

  • curl GET (mengambil data):
curl --location --request GET 'http://127.0.0.1:8000/api/task-schedule/' \
--header 'Authorization: Bearer TOKEN_JWT_ANDA'
  • curl POST (membuat data baru):
curl --location --request POST 'http://127.0.0.1:8000/api/task-schedule' \
--header 'Authorization: Bearer TOKEN_JWT_ANDA' \
--header 'Content-Type: application/json' \
--data-raw '{
    "name": "Makan Obat Biru",
    "days": ["Monday", "Tuesday", "Wednesday"],
    "time": "08:00",
    "description": "makan obat sore"
}'
  • curl PATCH (update sebagian field):
curl --location --request PATCH 'http://127.0.0.1:8000/api/task-schedule/11' \
--header 'Authorization: Bearer TOKEN_JWT_ANDA' \
--header 'Content-Type: application/json' \
--data-raw '{
    "name": "Makan Obat Kuning"
}'
  • curl PUT (update seluruh data):
curl --location --request PUT 'http://127.0.0.1:8000/api/task-schedule/11' \
--header 'Authorization: Bearer TOKEN_JWT_ANDA' \
--header 'Content-Type: application/json' \
--data-raw '{
    "name": "Makan Obat Batuk",
    "days": ["Monday", "Tuesday", "Wednesday"],
    "time": "08:00",
    "description": "makan obat sore"
}'
  • curl DELETE (menghapus data):
curl --location --request DELETE 'http://127.0.0.1:8000/api/task-schedule/1' \
--header 'Authorization: Bearer TOKEN_JWT_ANDA'

Penjelasan :

  • --request PATCH/PUT/DELETE : menentukan method HTTP yang dipakai
  • Authorization: Bearer TOKEN_JWT_ANDA : header token, ganti TOKEN_JWT_ANDA dengan token asli hasil login
  • --data-raw '...' : body request dalam format JSON

Contoh Syntax Di Laravel

syntax routing di Laravel untuk tiap HTTP verb di file routes/api.php:

use Illuminate\Support\Facades\Route;
use App\Http\Controllers\TaskScheduleController;

Route::name('taskSchedule')->get('task-schedule', [TaskScheduleController::class, 'index'])->middleware('auth:sanctum');
Route::name('taskSchedule.create')->post('task-schedule', [TaskScheduleController::class, 'create'])->middleware('auth:sanctum');
Route::name('taskSchedule.update')->put('task-schedule/{id}', [TaskScheduleController::class, 'update'])->middleware('auth:sanctum');
Route::name('taskSchedule.patch')->patch('task-schedule/{id}', [TaskScheduleController::class, 'update'])->middleware('auth:sanctum');
Route::name('taskSchedule.delete')->delete('task-schedule/{id}', [TaskScheduleController::class, 'destroy'])->middleware('auth:sanctum');

Penjelasan :

Pertanyaan yang Sering Diajukan

Apa beda PUT dan PATCH?

PUT mengganti resource secara keseluruhan (harus kirim semua field), sedangkan PATCH hanya mengubah sebagian field yang dikirim. contoh: PUT butuh name + hobi lengkap, PATCH cukup kirim name saja.

Kapan sebaiknya pakai PUT dan kapan PATCH?

Pakai PUT saat request mengirim seluruh data resource untuk replace total. Pakai PATCH saat hanya mengubah satu atau beberapa field, biar payload lebih kecil dan tidak menimpa field lain.

Apakah form HTML bisa mengirim PUT dan DELETE?

Tidak. Form HTML biasa hanya mendukung GET dan POST. PUT, PATCH, DELETE harus dikirim lewat JavaScript fetch/AJAX atau tool seperti cURL dan Postman.

HTTP method apa yang dipakai untuk login?

Login biasanya pakai POST karena mengirim data kredensial ke server dan membuat resource baru berupa sesi/token. GET tidak cocok karena data terlihat di URL.

Sigit Nurhanafi avatar
Full-stack developer & technical writer. Berpengalaman di PHP, Laravel, NodeJS, MySQL, dan Python. Aktif menulis tutorial pemrograman dan maintaining open-source projects di PemburuKode sejak 2021.