PUT, POST ve PATCH arasındaki fark nedir? [kapalı]


281

HTTP protokolünde PUT, POST ve PATCH yöntemleri arasındaki fark nedir?




12
Modern web API'lerinde GET / POST dışında bir şey kullanmak deliliktir. Çok fazla var. Çoğu modern uygulamada tanımlanan URI'lar değiştirilecek, güncellenecek vb. DEĞİLDİR. Bunlar belge değildir. Bunlar PROSEDÜRLER olarak adlandırılıyor. URI'nin kendisi, çağrılan yöntem dışında gerçek bir kaynağı nadiren tanımlar. Bu nedenle, JSON verilerini veya dosyaları istek gövdesinde yayınlamanız gerektiğinde sorgu dizesi istekleri ve POST'lar için GET kullanın. IMO, başka bir şey URI'leri içeren eski kavramları ve statik HTML belgelerindeki işlemleri buna benzemeyen yeni bir mimariye sokmaya çalışıyor.
Triynko


@Triynko Ve bahsettiğiniz prosedürler kaynakların oluşturulması , silinmesi ve değiştirilmesini içerir. RESTful olmaktan çok bu tür fikirleri iletmenin daha iyi bir yolu yoktur. Neden olmasın?
Константин Ван

Yanıtlar:


200

HTTP Fiillerinde PUT, POST, GET, DELETE ve PATCH arasındaki fark:

En yaygın kullanılan POST fiilleri POST, GET, PUT, DELETE, veritabanındaki CRUD (Oluşturma, Okuma, Güncelleme ve Silme) işlemlerine benzer. Bu HTTP fiillerini büyük harfle belirtiriz . Yani, aşağıda aralarındaki karşılaştırma.

  1. oluştur - POST
  2. oku - GET
  3. güncelleme - PUT
  4. sil - SİL

PATCH: Bir kaynağa kısmi bir değişiklik gönderir. Kaynak için yalnızca bir alanı güncellemeniz gerekiyorsa PATCH yöntemini kullanmak isteyebilirsiniz.

Not:
POST, PUT, DELETE içeriği değiştirdiğinden, aşağıdaki url için yapılan Fiddler ile yapılan testler güncellemeleri taklit eder. Aslında silmez veya değiştirmez. Ekleme, güncelleme, silme işlemlerinin olup olmadığını kontrol etmek için durum kodlarını görebiliriz.

URL: http://jsonplaceholder.typicode.com/posts/

1) ALIN:

GET, HTTP istek yönteminin en basit türüdür; bir bağlantıyı her tıkladığınızda veya adres çubuğuna bir URL yazdığınızda tarayıcıların kullandığı tarayıcı. Sunucuya, URL tarafından tanımlanan verileri istemciye iletmesi talimatını verir. Veriler hiçbir zaman bir GET isteği sonucunda sunucu tarafında değiştirilmemelidir. Bu anlamda, bir GET isteği salt okunurdur.

Fiddler veya PostMan ile kontrol: Cevabı kontrol etmek için Fiddler'ı kullanabiliriz. Fiddler'ı açın ve Oluştur sekmesini seçin. Fiili ve url'yi aşağıda gösterildiği gibi belirtin ve yanıtı kontrol etmek için Yürüt'ü tıklayın.

Fiil: GET

url: http://jsonplaceholder.typicode.com/posts/

Yanıt: Yanıtı şu şekilde alırsınız:

"userId": 1, "id": 1, "title": "aut sunt ...", "body": "quia et suscipit ..."

"Mutlu" (ya da hatasız) yolunda GET, XML veya JSON'da bir temsil ve 200 (Tamam) HTTP yanıt kodu döndürür. Bir hata durumunda, çoğunlukla 404 (BULUNAMADI) veya 400 (KÖTÜ TALEBİ) döndürür.

2) POST:

POST fiili çoğunlukla yeni kaynaklar oluşturmak için kullanılır. Özellikle, alt kaynaklar oluşturmak için kullanılır. Yani, başka bir kaynağa (örn. Üst) bağımlı.

Başarılı oluşturma işleminde, HTTP durumu 201'e dönün, yeni oluşturulan kaynağa 201 HTTP durumu ile bağlantı içeren bir Konum başlığı döndürün.

Fiddler veya PostMan ile kontrol: Cevabı kontrol etmek için Fiddler'ı kullanabiliriz. Fiddler'ı açın ve Oluştur sekmesini seçin. Fiili ve url'yi aşağıda gösterildiği gibi belirtin ve yanıtı kontrol etmek için Yürüt'ü tıklayın.

Fiil: POST

url: http://jsonplaceholder.typicode.com/posts/

İstek Gövdesi:

data: {title: 'foo', gövde: 'bar', kullanıcı kimliği: 1000, Kimlik: 1000}

Yanıt: Yanıt kodunu 201 olarak alırsınız.

Eklenen kaydı Id = 1000 ile kontrol etmek istiyorsak, fiili Al ve Kullan olarak değiştirin ve Yürüt'e tıklayın.

Daha önce de belirtildiği gibi, yukarıdaki url yalnızca okumalara (GET) izin verir, güncellenen verileri gerçek olarak okuyamayız.

3) PUT:

PUT en çok güncelleme yetenekleri için kullanılır , bilinen bir kaynak URI'ye PUT-in, orijinal kaynağın yeni güncellenmiş sunumunu içeren istek gövdesi ile birlikte.

Fiddler veya PostMan ile kontrol: Cevabı kontrol etmek için Fiddler'ı kullanabiliriz. Fiddler'ı açın ve Oluştur sekmesini seçin. Fiili ve url'yi aşağıda gösterildiği gibi belirtin ve yanıtı kontrol etmek için Yürüt'ü tıklayın.

Fiil: PUT

url: http://jsonplaceholder.typicode.com/posts/1

İstek Gövdesi:

data: {title: 'foo', gövde: 'bar', kullanıcı kimliği: 1, Kimlik: 1}

Yanıt: Başarılı bir güncellemede bir PUT'dan 200 (veya gövdede herhangi bir içerik döndürmüyorsa 204) döndürür.

4) SİL:

DELETE'in anlaşılması oldukça kolaydır. Bir URI tarafından tanımlanan bir kaynağı silmek için kullanılır .

Başarılı bir silme işleminde, HTTP durumu 200'ü (Tamam) bir yanıt gövdesi, belki de silinen öğenin temsili (genellikle çok fazla bant genişliği gerektirir) veya bir sarılmış yanıt döndürün (aşağıdaki Dönüş Değerleri'ne bakın). Ya bu ya da yanıt gövdesi olmadan HTTP durumunu 204 (NO CONTENT) döndür. Başka bir deyişle, gövdesi olmayan 204 durumu veya JSEND stili yanıt ve HTTP durumu 200 önerilen yanıtlardır.

Fiddler veya PostMan ile kontrol: Cevabı kontrol etmek için Fiddler'ı kullanabiliriz. Fiddler'ı açın ve Oluştur sekmesini seçin. Fiili ve url'yi aşağıda gösterildiği gibi belirtin ve yanıtı kontrol etmek için Yürüt'ü tıklayın.

Fiil: DELETE

url: http://jsonplaceholder.typicode.com/posts/1

Yanıt: Başarılı bir silme işleminde, yanıt gövdesi ile birlikte HTTP durumu 200'ü (Tamam) döndürür.

PUT ve PATCH arasındaki örnek

KOYMAK

Adımı değiştirmek zorunda kalsaydım Güncelleme için PUT isteği gönder:

{"first": "Nazmul", "last": "hasan"} Bu nedenle, burada ilk adı güncellemek için verilerin tüm parametrelerini tekrar göndermemiz gerekiyor.

YAMA:

Düzeltme eki isteği, yalnızca değiştirmemiz gereken verileri, verilerin diğer bölümlerini değiştirmeden veya etkilemeden göndereceğimizi söylüyor. Örn: yalnızca ilk adı güncellememiz gerekirse, yalnızca ilk adı geçiririz.

Daha fazla bilgi için lütfen aşağıdaki bağlantılara bakın:

https://jsonplaceholder.typicode.com/

https://github.com/typicode/jsonplaceholder#how-to

PATCH ve PUT isteği arasındaki temel fark nedir?

http://www.restapitutorial.com/lessons/httpmethods.html


62
PUT güncellenmiyor. PUT, verilen URI'de varlığı oluşturur veya değiştirir. HTTP spesifikasyonu başına PUT idempotenttir. Evet, güncellemek için kullanılabilir, ancak yalnızca güncelleme olarak düşünmek doğru değildir.
Maladon

2
kabul ediyorum PUT güncelleme değil, yerine eşlenebilir, çünkü PUT gönderdiğinizde, mevcut kaynağı geçersiz kılar. Ancak PATCH gönderirsek, yalnızca belirtilen girişlerin yerini alır.
Atul Chavan

1
PUT oluşturmak için de kullanılabileceğinden, cevabınızın hangisini kullanmam gerektiğini gösterdiğinden emin değilim?
Rob P.

1
Bu cevap çok daha iyi, ancak PATCH ile karşılaştırılmıyor: stackoverflow.com/a/630475/2391795
Vadorequest


11

Aşağıdaki tanım gerçek dünya örneğidir.

Örnek Genel Bakış
Her istemci verisi için, bu istemci verilerini bulmak üzere bir tanımlayıcı depolarız ve bu tanımlayıcıyı referans için o istemciye geri göndeririz.

  1. İLETİ

    • İstemci POST yöntemini kullanarak herhangi bir tanımlayıcı olmadan veri gönderirse, onu depolar ve yeni bir tanımlayıcı atarız.
    • İstemci yine aynı verileri POST yöntemini kullanarak herhangi bir tanımlayıcı olmadan gönderirse, depolar ve yeni bir tanımlayıcı atarız.
    • Not : Çoğaltmaya burada izin verilir
  2. KOYMAK

    • İstemci bir tanımlayıcı ile veri gönderirse, bu tanımlayıcının var olup olmadığını kontrol ederiz. Tanımlayıcı varsa verileri güncelleyeceğiz, onu oluşturacağız ve yeni bir tanımlayıcı atayacağız.
  3. YAMA

    • İstemci bir tanımlayıcı ile veri gönderirse, bu tanımlayıcının var olup olmadığını kontrol ederiz. Tanımlayıcı mevcutsa verileri güncelleyeceğiz, bir istisna atacağız.

Not: Put Method'da, bir tanımlayıcı bulunmazsa istisna atmıyoruz. Ancak Patch yönteminde, tanımlayıcı bulunmazsa bir istisna atarız.

Yukarıdaki sorularınız varsa lütfen bize bildirin.


8

İstek Türleri

  • oluştur - POST
  • oku - GET
  • oluştur veya güncelle - PUT
  • sil - SİL
  • güncelleme - PATCH

GET / PUT idempotenttir PATCH bazen idempotent olabilir

İdempotent nedir - Sorguyu birkaç kez tetiklersek, sonucunu etkilememesi gerekir.

get : -

basit olsun. Verileri sunucudan alın ve kullanıcıya gösterin

{
id:1
name:parth
email:x@x.com
}

post : -

Veritabanında yeni kaynak yarat. Yeni veri eklediği anlamına gelir. Bu idempotent değil.

put : -

Yeni kaynak oluşturun aksi takdirde mevcut kaynaklara ekleyin. İdempotent çünkü her zaman aynı kaynağı güncelleyecek ve çıktı aynı olacak. ex. - ilk veri

{
id:1
name:parth
email:x@x.com
}
  • put-localhost / 1 put e-posta gerçekleştir: ppp@ppp.com
{
id:1
email:ppp@ppp.com
}

patch

Şimdi yama isteği geldi PATCH bazen idempotent olabilir

id:1
name:parth
email:x@x.com
}

yama adı: w

{
id:1
name:w
email:x@x.com
}
HTTP Yöntemi
Evet
POST no
PAY evet
PATCH no *
SEÇENEKLER evet
KAFA evet
SİL evet

Kaynaklar: Idempotent - Idempotency nedir?


"Bazen" idempotent gerçekten ne anlama geliyor? İdempotensiyi ne belirler?
Polv

7

İşte hepsinin basit bir açıklaması:

  • POST her zaman bir kaynak oluşturmak içindir (çoğaltılmış olup olmadığı önemli değildir)
  • PUT kaynağın var olup olmadığını kontrol edip güncelleyin, aksi takdirde yeni kaynak oluşturun
  • PATCH her zaman bir kaynağı güncellemek içindir

5

PUT ve PATCH İstekleri Arasındaki Temel Fark :

Bir kişinin adını ve soyadını tutan bir kaynağımız olduğunu varsayalım.

İlk adı değiştirmek istiyorsak, Güncelleme için bir istek göndeririz

{ "first": "Michael", "last": "Angelo" }

Burada, yalnızca ilk adı değiştirmemize rağmen, PUT isteği ile her iki parametreyi de ilk ve son olarak göndermeliyiz.
Başka bir deyişle, tüm değerleri, tam yükü tekrar göndermek zorunludur.

Ancak bir PATCH isteği gönderdiğimizde yalnızca güncellemek istediğimiz verileri göndeririz. Başka bir deyişle, yalnızca güncellenecek ilk adı gönderiyoruz, soyadını göndermenize gerek yok.


2

Sırasıyla değiştirme / güncelleme için tam ve kısmi veri gönderme PUT & PATCH wrt arasındaki fark oldukça mantıklı. Ancak, aşağıdaki gibi sadece birkaç nokta

  1. Bazen POST oluşturma için Prt wrt güncellemeleri olarak kabul edilir
  2. HTTP, PATCH içinde tam veya kısmi veri göndermeyi zorunlu kılıyor / kontrol ediyor mu? Aksi takdirde, PATCH, PUT / POST'takiyle aynı olabilir


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.