HTTP/1.1 Spesifikasyonuna göre:
POST
yöntemi, kaynak sunucunun istekte yer alan varlığıRequest-Line
dakiRequest-URI
ile tanımlanan kaynağın yeni bir alt öğesi olarak kabul etmesini istemek için kullanılır
Başka bir deyişle, POST
oluşturmak için kullanılır.
PUT
yöntemi, ekteki varlığın sağlananRequest-URI
altında depolanmasını ister. EğerRequest-URI
zaten var olan bir kaynağa atıfta bulunuyorsa, ekteki varlık kaynak sunucuda bulunanın değiştirilmiş bir versiyonu olarak kabul edilmelidir. EğerRequest-URI
mevcut bir kaynağa işaret etmiyorsa ve bu URI talep eden kullanıcı aracısı tarafından yeni bir kaynak olarak tanımlanabiliyorsa, kaynak sunucu bu URI ile kaynağı oluşturabilir."
Yani, PUT
oluşturmak veya güncellemek için kullanılır.
Peki, bir kaynak oluşturmak için hangisi kullanılmalıdır? Yoksa her ikisini de desteklemek mi gerekir?
Genel:
Hem PUT hem de POST oluşturmak için kullanılabilir.
Ne kullanmanız gerektiğini ayırt etmek için "eylemi ne için gerçekleştiriyorsunuz? " diye sormanız gerekir. Soru sormak için bir API tasarladığınızı varsayalım. POST kullanmak istiyorsanız, bunu bir soru listesine yaparsınız. PUT kullanmak istiyorsanız, bunu belirli bir soruya yaparsınız.
Her ikisi de kullanılabilir, peki RESTful tasarımımda hangisini kullanmalıyım:
Hem PUT hem de POST'u desteklemeniz gerekmez.
Hangisinin kullanılacağı size bırakılmıştır. Ancak, istekte hangi nesneye atıfta bulunduğunuza bağlı olarak doğru olanı kullanmayı unutmayın.
Bazı hususlar:
Bir örnek:
Aşağıdakileri SO'da bununla ilgili başka bir cevabın parçası olarak yazdım:
POST:
Bir kaynağı değiştirmek ve güncellemek için kullanılır
POST /questions/
HTTP/1.1 Ana bilgisayar: www.example.com/ Aşağıdakilerin bir hata olduğunu unutmayın:
POST /questions/
HTTP/1.1 Ana bilgisayar: www.example.com/ URL henüz oluşturulmamışsa oluşturmak için POST kullanılmamalıdır adını belirtirken. Bu olmalıdır bir 'kaynak bulunamadı' hatasıyla sonuçlanır çünkü
<new_question>
mevcut değil henüz.<yeni_soru>
yu PUT etmelisiniz kaynağını önce sunucuya koymalısınız.Yine de şöyle bir şey yapabilirsiniz POST kullanarak bir kaynak oluşturmak için bu:
POST /sorular HTTP/1.1 Ana bilgisayar: www.example.com/
Bu durumda kaynağın adı belirtilmezse, yeni nesneler URL yolu size döndürülecektir.
GİRİŞ:
Bir kaynak oluşturmak için kullanılır veya üzerine yazın. Siz belirtirken kaynaklar yeni URL.
Yeni bir kaynak için:
PUT /sorular/
HTTP/1.1 Ana bilgisayar: www.example.com/ Mevcut bir kaynağın üzerine yazmak için:
PUT /sorular/
HTTP/1.1 Ana bilgisayar: www.example.com/
Oluşturmak için POST, güncellemek için PUT kullanın. Ruby on Rails bunu bu şekilde yapıyor.
PUT /items/1 #=> update
POST /items #=> create
REST çok üst düzey bir kavramdır. Aslında, HTTP'den hiç bahsetmiyor bile!
REST'in HTTP'de nasıl uygulanacağı konusunda şüpheleriniz varsa, [Atom Publication Protocol (AtomPub)][1] spesifikasyonuna her zaman göz atabilirsiniz. AtomPub, HTTP ile RESTful web hizmetleri yazmaya yönelik bir standarttır ve REST'in mucidi ve HTTP'nin (ortak) mucidi Roy Fielding'in de katkılarıyla birçok HTTP ve REST uzmanı tarafından geliştirilmiştir.
Aslında, AtomPub'ı doğrudan kullanmanız bile mümkün olabilir. Bloglama topluluğundan çıkmış olsa da, hiçbir şekilde bloglama ile sınırlı değildir: HTTP aracılığıyla rastgele kaynakların rastgele (iç içe) koleksiyonlarıyla REST olarak etkileşim kurmak için genel bir protokoldür. Uygulamanızı iç içe geçmiş bir kaynak koleksiyonu olarak temsil edebiliyorsanız, AtomPub'ı kullanabilir ve PUT veya POST kullanıp kullanmayacağınız, hangi HTTP Durum Kodlarının döndürüleceği ve tüm bu ayrıntılar hakkında endişelenmeyebilirsiniz.
AtomPub'ın kaynak oluşturma hakkında söylediği şey budur (bölüm 9.2):
Bir Koleksiyona üye eklemek için, istemciler Koleksiyonun URI'sine POST istekleri gönderir.