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 berubahDELETE: 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:
PUTmenimpa resource dengan data baru secara keseluruhan. kalau request PUT hanya mengirimname, field lain sepertihobyakan hilang/bernilai kosong karena di-replace totalPATCHmengubah 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 dipakaiAuthorization: Bearer TOKEN_JWT_ANDA: header token, gantiTOKEN_JWT_ANDAdengan 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 :
Route::get/post/put/patch/delete(...): mendefinisikan endpoint dengan method HTTP yang sesuai{id}: parameter dinamis untuk menentukan data mana yang di-update atau dihapusmiddleware('auth:sanctum'): melindungi route, butuh token loginCara Mengurutkan 3 Bilangan Acak dengan Algoritma Terbaik (Dengan C++)
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.

