Hangi uygulama katmanı protokolünün kullandığı get put ve post mesaj türleri. HTTP istek türleri ve REST felsefesi. Örnek uygulama nasıl çalışır?

  • 03.11.2019

Anladığım kadarıyla MySQL'de PUT ve POST işlemlerini karşılaştırırsak POST INSERT, PUT ise UPDATE veya INSERT olur.

Örnek olarak bir forumu ele alalım. Konuları ve mesajları var. Merhaba konusuna istekte bulunuyoruz

POST /konu/merhaba?mesaj = İşte POST /konu/merhaba?mesaj = POST /konu/merhaba?mesaj = Vasya

İlk sorgu oluşturacak ( SOKMAK) "İşte" mesajı ile bir merhaba konusu, diğer iki istek de ( SOKMAK) konuyla ilgili yeni mesajlar. Sonuç olarak merhaba konusunun şunları içerdiğini anlıyoruz: Vasya buradaydı.

PUT /konu/merhaba?mesaj = İşte PUT /konu/merhaba?mesaj = PUT idi /konu/merhaba?mesaj = Vasya

İlk sorgu oluşturacak ( SOKMAK) "Burada" mesajı ile merhaba konusu, diğer iki istek güncellenecektir ( GÜNCELLEME) konudaki mesaj. Sonuç olarak, merhaba temasının şunları içerdiğini görüyoruz: Vasya.

iktidarsızlık KOYMAK burada görünüyor ki mesaj sayısı sonraki işlemler sırasında veritabanında değişmeden kalır. Bağlantılarla ilgili olarak - site haritası değişmeden kalacaktır. Sadece konu içerikleri güncellenecektir.

veya: her POST /makale/merhaba isteği oluşturmak merhaba yeni bir bölüm. İlk istek makalenin kendisini oluşturacaktır.

her PUT/makale/merhaba isteği Güncelleme Makaledeki TEK bölüm merhaba. İlk istek makalenin kendisini oluşturacaktır.

Bir POST yaparsak, GET'in bize geri dönmesi gereken şey:

GET /topic/hello 201 Vasya buradaydı

Bu durumda, bu URI'leri de kullanılabilir hale getireceğiz

GET /topic/hello/1 201 İşte GET /topic/hello/2 201 GET /topic/hello/3 201 Vasya

PUT yaparsak, GET'in bize geri dönmesi gereken şey budur.

GET /konu/merhaba 201 Vasya

Bu durumda, yalnızca bir URI kullanılabilir

GET /konu/merhaba/1 201 Vasya GET /konu/merhaba/2 404 GET /konu/merhaba/3 404

ÖRNEK #2 Kullanıcılarla örnek.

POST /user/eugen?age=7 POST /user/eugen?age=10 POST /user/eugen?age=5

Eugen adlı ve sırasıyla 7, 10, 5 yaşlarında 3 kullanıcı oluşturacak.

PUT /user/eugen?age=7 PUT /user/eugen?age=10 PUT /user/eugen?age=5

5 yaşındaki eugen adında yalnızca bir kullanıcı oluşturulacak

Başka bir deyişle: PUT güncellemek zorunda veri zaten varsa kaydet

Bu nedenle örneğiniz String userId = this.request["USER_ID"]; değeri bir değişkende saklamak. kaç kere yatarsın KOYMAK) değerleri bir değişkene dönüştürür - değişken her zaman bir olacaktır.

Buradan doğdu ÖRNEK #3

Bu benzetme ne kadar doğru bilmiyorum ama şu ifadenin doğru olacağını düşünüyorum:

POST: $değişken, değere basın; -- bir dizi değerle sonuçlanır PUT: $değişken = değer; -- bir seferde bir değer

POST durumunda, meydana gelebilecek zarar, sunucunun belleğinin taşmasıdır. PUT durumunda - zarar yoktur, sadece döngüler alınır ;-)

Bu arada, güvenlik ve iktidarsızlık hakkında iyi bir kaynak buldum

Platform sürümü 8.3.9.2170 ile 1C'den siteye bilgi gönderme prosedürünü geliştirirken bir sorunla karşılaştım: site geliştiricisi bana gerekli bilgileri yalnızca PUT yöntemini kullanarak bir HTTP isteği kullanarak kaydetme fırsatı verdi.

İki kere düşünmeden basit bir kod çizdim:

Bağlantı = Yeni HTTPConnection("www.mysite.ru"); Başlıklar = Yeni Eşleşme; Headers["Content-Type"] = "application/x-www-form-urlencoded"; İstek = Yeni HTTPRequest("/api/order_items/93076?order_item=30", Başlıklar); Connection.Write(İstek);

Yürütmenin sonuçlarına göre, alıcının web sitesindeki siparişinin ilgili satırı, depoda alınan malların miktarını belirtmelidir.

Ancak, muhtemelen zaten anladığınız gibi, hiçbir şey olmadı. Sitede hata olmadığından emin olduktan sonra (Chrome eklentisi üzerinden benzer bir istek göndererek) yerel bilgisayarımda bir web sunucusu başlattım ve denemeye başladım.

Garip bir şey hemen ortaya çıktı: yukarıdaki kod bir PUT değil, bir HEAD isteği oluşturur!

Apache günlüklerinde aşağıdakileri gördüm:

127.0.0.1 - - "HEAD /api/order_items/93076?order_item=30 HTTP/1.1"

Biraz şaşırdım (sonuçta, PUT kılavuzunda siyah beyaz yazılmıştır), ancak kaybetmedim - sonuçta, yöntemi doğrudan çağırabilirsiniz:

Connection.CallHTTPMethod("PUT",Talep);

Günlükler aynı:

127.0.0.1 - - "HEAD /api/order_items/93076?order_item=30 HTTP/1.1"

"Belki yanlış bir şey yapıyorum?" - Kendime bir soru sordum. Ancak internette ve kılavuzlarda hiçbir ipucu yoktu. Eh, henüz kimse bilimsel dürtme yöntemini iptal etmedi. Başlamak için şunu yapmaya çalıştım:

Connection.CallHTTPMethod("fwfw", İstek);

Aldığım günlüklerde:

127.0.0.1 - - "?????? /api/order_items/93076?order_item=30 HTTP/1.1"

Merakla, 1C'nin özellikle PUT yönteminin yerini aldığı anlamına gelir (neden 1C'yi memnun etmedi?).

Birkaç denemeden sonra şunu buldum:

Connection.CallHTTPMethod("PUT", İstek);

Aldığım günlüklerde:

127.0.0.1 - - "PUT /api/order_items/93076?order_item=30 HTTP/1.1"

Ve bu seçenek sitede zaten çalıştı ve herkes memnun kaldı.

Soruna daha doğru bir çözüm önerdi: istek gövdesini, herhangi birini, hatta boş olarak belirtmelisiniz. Örneğin, bu işe yarar:

Bağlantı = Yeni HTTPConnection("www.mysite.ru"); Başlıklar = Yeni Eşleşme; Headers["Content-Type"] = "application/x-www-form-urlencoded"; İstek = Yeni HTTPRequest("/api/order_items/93076?order_item=30", Başlıklar); Query.SetBodyFromString("", TextEncoding.UTF8, UseByteOrderMark.Don't Use); Connection.Write(İstek);

Ve muhtemelen, parametre değerlerini talep gövdesine aktarmak zaten oldukça doğrudur.

Sonuç şu şekildedir: 1C platformu, gövdesi olmayan bir PUT talebini hatalı kabul eder ve yöntemi HEAD ile değiştirir.

1C'nin gövdesi olmayan bir POST isteğini izlememesi ve GET'e dönüştürmemesi ilginç, spor ilgisi uğruna kontrol ettim.

Ünlü fıkradan ünlü Vovochka'nın dediği gibi: "Mantık nerede?".

Umarım yayınım, cevap arayan birini birkaç saatlik hayat kurtarır. =)))

15 yanıt

HTTP PUT:

PUT, bir dosya veya kaynağı belirli bir URI'ye ve tam olarak bu URI'ye yerleştirir. Bu URI'de zaten bir dosya veya kaynak varsa, PUT bu dosya veya kaynağı değiştirir. Dosya veya kaynak yoksa, PUT onu oluşturur. PUT önemsizdir, ancak paradoksal olarak PUT yanıtları önbelleğe alınamaz.

HTTP GÖNDERİ:

POST, verileri belirli bir URI'ye gönderir ve bu URI'deki kaynağın isteği işlemesini bekler. Bu noktada web sunucusu, belirtilen kaynak bağlamında verilerle ne yapacağını belirleyebilir. POST yöntemi bağımsız değildir, ancak sunucu uygun Cache-Control ve Expires başlıklarını ayarlarsa POST yanıtları önbelleğe alınabilir.

Resmi HTTP RFC, POST'u şu şekilde tanımlar:

  • Mevcut kaynakların ek açıklaması;
  • Bir bülten tahtasına, haber grubuna, posta listesine veya benzer bir makale grubuna mesaj göndermek;
  • Bir veri işlemine bir form gönderiminin sonucu gibi bir veri bloğu sağlamak;
  • Veritabanını bir ekleme işlemi ile genişletme.

POST ve PUT arasındaki fark:

RFC'nin kendisi ana farkı açıklar:

POST ve PUT istekleri arasındaki temel fark, İstek-URI'sinin farklı anlamında yansıtılır. POST isteğindeki URI, özel varlığı idare edecek kaynağı tanımlar. Bu kaynak, bir veri alma işlemi, başka bir protokole ağ geçidi veya açıklamaları kabul eden ayrı bir varlık olabilir. Buna karşılık, bir PUT isteğindeki bir URI, isteğe bağlı varlığı tanımlar - kullanıcı aracısı, URI'nin ne olduğunu bilir ve sunucu, isteği başka bir kaynağa uygulamaya ÇALIŞMAMALIDIR. Sunucu, isteğin farklı bir URI'ye uygulanmasını isterse, bir 301 (yer değiştirmiş kalıcı) yanıtı göndermesi ZORUNLUDUR; kullanıcı aracısı, isteğin yeniden yönlendirilip yönlendirilmeyeceği konusunda kendi kararını verebilir.

İlişkili olmayan doğru yöntemi kullanmak:

Sadece anlambilim.

HTTP PUT'un bir istek gövdesi alması ve ardından bunu URI tarafından tanımlanan kaynakta saklaması gerekir.

HTTP POST daha geneldir. Sunucuda bir eylemi tetiklemesi gerekiyor. Bu eylem, istek gövdesini URI tarafından tanımlanan kaynakta depolamak için olabilir veya başka bir URI olabilir veya başka bir eylem olabilir.

KOYMAK , Örneğin. Bir URI'ye yerleştirilmesi, tam olarak o URI'yi etkiler. Bir URI'ye yapılan POST herhangi bir etkiye sahip olabilir.

REST tarzı kaynaklara örnek vermek gerekirse:

Bir kitap hakkında bir sürü bilgi içeren "POST /books", yeni bir kitap oluşturabilir ve o kitabı tanımlayan yeni bir URL ile yanıt verebilir: "/books/5".

"PUT/books/5", kimliği 5 olan yeni bir kitap oluşturur veya mevcut kitabı kimliği 5 ile değiştirir.

Kaynak olmayan stilde, POST, yan etkisi olan hemen hemen her şey için kullanılabilir. Diğer bir fark, PUT'un önemsiz olması gerektiğidir - birden fazla POST birden fazla nesne oluşturabiliyorsa veya POST işleminiz ne yaparsa yapsın, aynı verinin aynı URL'ye birden çok PUT'unun doğru olması gerekir.

1) GET: - bir istemci bir web sunucusundan bir kaynak istediğinde kullanılır.

2) HEAD: - istemci kaynak hakkında bazı bilgiler istediğinde ancak kaynağın kendisini talep etmediğinde kullanılır.

3) POST: - istemci, örneğin çevrimiçi bir form doldurarak (yani web sunucusuna büyük miktarda karmaşık veri göndererek) sunucuya bilgi veya veri gönderdiğinde kullanılır.

4) PUT: - İstemci yeni bir belge gönderdiğinde veya istek URL'si altında web sunucusuna yeni bir belge yüklediğinde kullanılır.

5) SİL: - İstemci, istek URL'si tarafından belirtilen web sunucusundan belgeyi silmeye çalışırken kullanılır.

6) İZLEME: - Bir istemci, mevcut proxy'lerden veya ara sunuculardan, kendi reklamını yapmak için talebi değiştirmesini istediğinde kullanılır.

7) SEÇENEKLER: - İstemci, web sunucusunda belgeyi almak veya işlemek için mevcut diğer yöntemleri belirtmek istediğinde kullanılır.

8) BAĞLAN: - Bir istemci, tipik olarak bir HTTP proxy aracılığıyla SSL şifreli iletişim (HTTPS) sağlamak için uzak bir ana bilgisayara şeffaf bir bağlantı kurmak istediğinde kullanılır.

Diğerleri zaten harika cevaplar yayınladılar, sadece çoğu dilde, çerçevelerde ve kullanım durumlarında POST ile uğraşacağınızı eklemek istedim, PUT'tan çok daha sık. PUT, DELETE, vb. Bunlar çoğunlukla önemsiz sorulardır.

Buna göre RFC, PUT ve POST arasındaki fark istek URI'sindedir. POST tarafından tanımlanan URI, POST isteğini işleyecek varlığı belirtir. PUT isteğindeki URI, istekteki nesneyi içerir. Dolayısıyla POST /v1/kahveler/siparişler, yeni bir kaynak oluşturmak ve kaynağı tanımlamak için bir kimlik döndürmek anlamına gelir. Buna karşılık, PUT /v1/coffees/orders/1234, varsa " 1234 " ile tanımlanan kaynağı güncellemek anlamına gelir; aksi takdirde, yeni bir sipariş oluşturun ve bunu tanımlamak için siparişler/1234 URI'sini kullanın.

PUT ve POST, yöntemleri oluşturmak veya güncellemek için kullanılabilir. Yöntemin kullanımı, yöntemden beklenen önemsiz davranışa ve onu tanımlayacak kaynağın konumuna bağlıdır.

POST, fabrika tipi bir yöntem gibi bir şey olarak kabul edilir. Ne istediğinizi yaratmak için ona veri eklersiniz ve diğer uçta ne varsa onunla ne yapacağını bilir. PUT, belirli bir URL'deki mevcut verileri güncellemek veya URI'nin ne olacağını bildiğinizde ve henüz mevcut olmadığında yeni bir şey oluşturmak için kullanılır (bir şey yaratacak ve gerektiğinde URL'yi döndürecek olan POST'un aksine).

Son zamanlarda, popüler web geliştiricisinin POST'un bir kaynak oluşturmak için kullanıldığı ve PUT'un güncelleme/değiştirmek için kullanıldığına dair yanlış algısından çok rahatsız oldum.

RFC 2616'nın 55. sayfasına ("Köprü Metni Aktarım Protokolü - HTTP/1.1"), bölüm 9.6'ya ("PUT") bakarsanız, PUT'un aşağıdakiler için geçerli olduğunu görürsünüz:

PUT yöntemi, kapalı varlığın sağlanan İstek URI'sinde saklanmasını ister.

POST ve PUT arasındaki farkı açıklayan kullanışlı bir paragraf da var:

POST ve PUT istekleri arasındaki temel fark, farklı İstek-URI değerine yansıtılır. POST isteğindeki URI, ekteki nesnenin işleyeceği kaynağı tanımlar. Bu kaynak, bir veri kabul süreci, başka bir protokole ağ geçidi veya açıklamaları kabul eden ayrı bir varlık olabilir. Buna karşılık, bir PUT isteğindeki bir URI, istekle birlikte verilen varlığı tanımlar - kullanıcı aracısı URI'nin ne olduğunu bilir ve sunucu, isteği başka bir kaynağa uygulamaya ÇALIŞMAMALIDIR.

Güncelleme/yaratma farkı hakkında hiçbir şey söylemiyor, çünkü bununla ilgili değil. Bunun arasındaki fark hakkında:

Obj.set_attribute(değer) # Bir POST isteği.

Obj.attribute = değer # Bir PUT isteği.

Bu yüzden lütfen bu popüler yanılgıyı yaymayı bırakın. RFC'lerinizi okuyun.

REST, geliştiricilerden HTTP yöntemlerini açıkça ve protokolün tanımına uygun bir şekilde kullanmalarını ister. Bu temel REST tasarım ilkesi, oluşturma, okuma, güncelleme, silme (CRUD) işlemleri ve HTTP yöntemleri arasında bire bir eşleme kurar. Bu ekrana göre:

Sunucuda bir kaynak oluşturmak için POST'u kullanın.

Bir kaynak almak için GET'i kullanın.

Bir kaynağın durumunu değiştirmek veya güncellemek için PUT'u kullanın.

Bir kaynağı kaldırmak veya kaldırmak için DELETE'i kullanın.

HTTP (Köprü Metni Aktarım Protokolü - “köprü metni aktarım protokolü”) bir uygulama katmanı veri aktarım protokolüdür (başlangıçta HTML biçimindeki köprü metni belgeleri biçimindedir). HTTP'nin temeli "istemci-sunucu" teknolojisidir, yani bir bağlantı başlatan ve bir istek gönderen tüketicilerin (istemciler) ve bir bağlantının istek almasını bekleyen sağlayıcıların (sunucuların) varlığını varsayar. gerekli işlemleri yapın ve sonucu içeren bir mesaj geri gönderin. HTTP, web sitelerinden bilgi almak için artık World Wide Web'de her yerde bulunur.

HTTP ayrıca SOAP, XML-RPC, WebDAV gibi diğer uygulama katmanı protokolleri için bir "aktarım" olarak kullanılır.

HTTP'de manipülasyonun ana nesnesi, istemci isteğinde URI (İngilizce Tekdüzen Kaynak Tanımlayıcı) tarafından işaret edilen kaynaktır. Tipik olarak, bu kaynaklar sunucuda depolanan dosyalardır, ancak mantıksal nesneler veya soyut bir şey olabilirler. HTTP protokolünün bir özelliği, istekte ve yanıtta aynı kaynağın çeşitli parametrelerle nasıl temsil edildiğini belirtme yeteneğidir: biçim, kodlama, dil vb. (Özellikle bunun için HTTP başlığı kullanılır.) ve sunucu bu protokol metin olmasına rağmen ikili veri alışverişi yapabilir.

HTTP, FTP ve SMTP'ye benzer bir uygulama katmanı protokolüdür. Mesajlar, olağan "istek-yanıt" şemasına göre değiştirilir. HTTP, kaynakları tanımlamak için global URI'leri kullanır. Diğer birçok protokolün aksine, HTTP durumsuzdur. Bu, istek-yanıt çiftleri arasında hiçbir ara durumun depolanmadığı anlamına gelir. HTTP kullanan bileşenler, son istekler ve yanıtlarla ilgili durum bilgilerini bağımsız olarak tutabilir (örneğin, istemci tarafında "çerezler", sunucu tarafında "oturumlar"). İstekleri gönderen tarayıcı, yanıt gecikmelerini izleyebilir. Sunucu, son istemcilerin IP adreslerini ve istek başlıklarını saklayabilir. Ancak protokolün kendisi önceki istek ve yanıtlardan haberdar değildir, dahili devlet desteği sağlamaz, bu tür gereksinimleri yoktur.

Avantajlar

    Bu protokolün uygulanması çok kolaydır, uygulamaya işlevsellik katan özel başlıklar enjekte edilerek genişletilebilir ve bunların bilinmediğini düşünen diğer uygulamalar tarafından yok sayılır:

    Basitlik. Protokolün uygulanması kolaydır, bu da istemci uygulamaları oluşturmayı kolaylaştırır.

    Genişletilebilirlik. Protokolün yetenekleri, belirli bir sorunu çözmek için gerekli işlevselliği elde edebileceğiniz kendi başlıklarını tanıtarak kolayca genişletilebilir. Aynı zamanda, diğer istemciler ve sunucularla uyumluluk korunur: bilmedikleri başlıkları görmezden gelirler.

    yaygınlık. Belirli sorunları çözmek için HTTP protokolünü seçerken önemli bir faktör yaygınlığıdır. Sonuç olarak, bu, dünyanın birçok dilinde protokolle ilgili çeşitli belgelerin bolluğu, popüler IDE'lerde kullanımı kolay geliştirme araçlarının dahil edilmesi, birçok program tarafından bir istemci olarak protokolün desteklenmesi ve bir HTTP sunucuları olan barındırma şirketleri arasında kapsamlı seçim.

Protokol yapısı

Her HTTP mesajı, listelenen sırayla gönderilen üç bölümden oluşur:

    Başlangıç ​​satırı - mesaj türünü tanımlar;

    Başlıklar - mesaj gövdesini, iletim parametrelerini ve diğer bilgileri karakterize edin;

    Mesaj gövdesi, mesaj verisinin kendisidir. Başlıklardan boş bir satırla ayrılmalıdır.

İletinin başlıkları ve gövdesi atlanabilir, ancak istek/yanıt türünü belirttiği için başlangıç ​​dizesi gerekli bir öğedir. Bunun istisnası, istek mesajının yalnızca başlangıç ​​satırını içerdiği ve yanıt mesajının yalnızca mesaj gövdesini içerdiği protokolün 0.9 sürümüdür.

Başlama çizgisi

Başlangıç ​​dizeleri istek ve yanıt için farklıdır. Sorgu dizesi şöyle görünür:

GET URI - protokol sürümü 0.9 için

URI HTTP/Sürüm Yöntemi - diğer sürümler için.

    Yöntem - isteğin adı, büyük harflerle bir kelime. HTTP sürüm 0.9'da yalnızca GET yöntemi kullanılmış olup, sürüm 1.1 için istek listesi aşağıda sunulmuştur.

    URI, istenen belgenin yolunu belirtir.

    Sürüm (İng. Sürüm) - bir nokta ile ayrılmış bir çift sayı. Örneğin: 1.0

Sunucu yanıtının başlangıç ​​satırı aşağıdaki biçime sahiptir: HTTP/Sürüm DurumKodu Açıklama, nerede:

    Sürüm - sorgudaki gibi noktayla ayrılmış bir çift rakam.

    Durum Kodu - üç basamaklı. Durum kodu, mesajın diğer içeriğini ve müşterinin davranışını belirler.

    Açıklama (İng. Sebep Tümcesi) - kullanıcı için yanıt kodunun kısa bir metin açıklaması. Mesajı hiçbir şekilde etkilemez ve isteğe bağlıdır.

Örneğin, sunucunun önceki bir isteğe verdiği yanıtın başlangıç ​​satırı şöyle görünebilir:

yöntemler

HTTP Yöntemi - kontrol ve sınırlayıcılar dışında, kaynaktaki ana işlemi gösteren herhangi bir karakter dizisi. Genellikle yöntem, büyük harflerle yazılmış kısa bir İngilizce kelimedir. Yöntem adının büyük/küçük harf duyarlı olduğunu unutmayın.

Her sunucu en azından GET ve HEAD yöntemlerini desteklemelidir. Sunucu, istemci tarafından belirtilen yöntemi tanımıyorsa, 501 (Uygulanmadı) durumu döndürmelidir. Yöntem sunucu tarafından biliniyorsa ancak belirli bir kaynağa uygulanamıyorsa, 405 (Yönteme İzin Verilmez) mesajı döndürülür. Her iki durumda da sunucu, yanıt mesajında ​​desteklenen yöntemlerin bir listesini içeren bir İzin Ver başlığı içermelidir.

GET ve HEAD yöntemlerine ek olarak, POST yöntemi sıklıkla kullanılır.

SEÇENEKLER Belirli bir kaynak için web sunucusu yeteneklerini veya bağlantı seçeneklerini belirlemek için kullanılır. Yanıt olarak, sunucu, desteklenen yöntemlerin bir listesini içeren bir İzin Ver başlığı içermelidir. Yanıt başlığı, desteklenen uzantılarla ilgili bilgileri de içerebilir.

Müşteri talebinin, kendisini ilgilendiren bilgileri belirtmek için bir mesaj gövdesi içerebileceği varsayılmaktadır. Gövdenin formatı ve onunla çalışma sırası şu anda tanımlanmamıştır. Sunucu şimdilik bunu görmezden gelmelidir. Durum, sunucu yanıtındaki gövde ile benzer.

Tüm sunucunun yeteneklerini bulmak için, istemci URI'de bir yıldız işareti - "*" belirtmelidir. "OPTIONS * HTTP/1.1" istekleri, sunucunun sağlığını ("ping" göndermeye benzer şekilde) test etmek ve sunucunun HTTP sürüm 1.1'i destekleyip desteklemediğini test etmek için de kullanılabilir.

Bu yöntemi yürütmenin sonucu önbelleğe alınmaz.

Belirtilen kaynağın içeriğini sorgulamak için kullanılır. GET yöntemini kullanarak da bir işlem başlatabilirsiniz. Bu durumda, işlemin ilerleyişi hakkındaki bilgiler yanıt mesajının gövdesine dahil edilmelidir.

İstemci, "?" karakterinden sonra hedef kaynağın URI'sinde istek yürütme parametrelerini iletebilir:

GET /yol/kaynak?param1=değer1¶m2=değer2 HTTP/1.1

Sunucu yanıtında gövde olmaması dışında GET yöntemine benzer. HEAD isteği genellikle meta verileri almak, bir kaynağın varlığını kontrol etmek (URL doğrulaması) ve son erişimden bu yana değişip değişmediğini görmek için kullanılır.

Yanıt başlıkları önbelleğe alınabilir. Kaynağın meta verileri önbellekteki karşılık gelen bilgilerle eşleşmiyorsa, kaynağın kopyası eski olarak işaretlenir.

Kullanıcı verilerini belirli bir kaynağa geçirmek için kullanılır. Örneğin, bloglarda, ziyaretçiler genellikle yazılar hakkındaki yorumlarını bir HTML biçiminde girebilir, ardından POST yöntemiyle sunucuya gönderilir ve bunları sayfaya yerleştirir. Bu durumda, iletilen veriler (bloglarla ilgili örnekte, yorum metni) istek gövdesine dahil edilir. Benzer şekilde, POST yöntemi genellikle dosyaları sunucuya yüklemek için kullanılır.

GET yönteminden farklı olarak, POST yöntemi önemsiz olarak kabul edilmez, yani aynı POST isteklerinin tekrar tekrar tekrarlanması farklı sonuçlar verebilir (örneğin, her yorum gönderiminden sonra bu yorumun başka bir kopyası görünecektir).

Sonuç 200 (Tamam) ise, yanıt gövdesi, isteğin sonucu hakkında bir mesaj içermelidir. Bir kaynak oluşturulduysa, sunucu, Konum başlığında yeni kaynağın URI'si ile birlikte bir 201 (Oluşturuldu) yanıtı döndürmelidir ÖNEMLİDİR.

POST yöntemi için sunucu yanıt mesajı önbelleğe alınmadı.

İsteğin içeriğini istekte belirtilen URI'ye indirmek için kullanılır. Verilen URI için kaynak yoksa, sunucu onu oluşturur ve 201 (Oluşturuldu) durumunu döndürür. Kaynak değiştirilmişse, sunucu 200 (Tamam) veya 204 (İçerik Yok) döndürür. Sunucu, istemci tarafından mesajla birlikte gönderilen geçersiz Content-* başlıklarını dikkate almamalıdır ZORUNLU. Bu başlıklardan herhangi biri tanınamıyorsa veya mevcut koşullar altında geçerli değilse, 501 (Uygulanmadı) hata kodu döndürülmelidir.

POST ve PUT yöntemleri arasındaki temel fark, kaynak URI'lerinin amacının anlaşılmasında yatmaktadır. POST yöntemi, istemci tarafından gönderilen içeriğin belirtilen URI'de işleneceğini varsayar. İstemci, PUT kullanarak, yüklenen içeriğin verilen URI'deki kaynakla eşleştiğini varsayar.

PUT yöntemine yönelik sunucu yanıt mesajları önbelleğe alınmaz.

PUT'a benzer, ancak yalnızca bir kaynak parçası için geçerlidir.

Belirtilen kaynağı siler.

İstemcinin, ara sunucuların isteğe hangi bilgileri eklediğini veya değiştirdiğini görebilmesi için alınan isteği döndürür.

Belirtilen kaynağı başkalarıyla ilişkilendirir.

Belirtilen kaynağı diğerlerinden ayırır.

Genellikle şifrelenmemiş bir proxy aracılığıyla SSL ile güvenli bir bağlantının kurulmasını kolaylaştırmak için istek bağlantısını şeffaf bir TCP/IP tüneline dönüştürür.

7 yanıt

İLETİ

HTTP.POST, istemci sunucuya veri gönderdiğinde ve sunucu yeni oluşturulan kaynak için URI'yi belirlediğinde kullanılabilir. POST yöntemi, kaynak sunucunun istekte bulunan nesneyi istek dizesinde İstek-URI tarafından tanımlanan yeni bir alt kaynak olarak kabul etmesini istemek için kullanılır.

KOYMAK

HTTP.PUT, bir istemci bir sunucuya veri gönderdiğinde ve istemci yeni oluşturulan bir kaynak için bir URI belirlediğinde kullanılabilir. PUT yöntemi, iç içe geçmiş nesnenin sağlanan İstek URI'si altında saklanmasını ister. İstek URI'si zaten var olan bir kaynağa başvuruyorsa, iç içe geçmiş nesne, kaynak sunucuda bulunan değiştirilmiş bir sürüm olarak ele alınmalıdır ÖNEMLİDİR. İstek URI'si mevcut bir kaynağa işaret etmiyorsa ve bu URI'nin istekte bulunan kullanıcı aracısı tarafından yeni bir kaynak olduğu belirlenebiliyorsa, kaynak sunucu bu URI ile bir kaynak yaratabilir.

YAMA

HTTP.PATCH, istemci, sunucu tarafından uygulanacak bir veya daha fazla değişiklik gönderdiğinde kullanılabilir. PATCH yöntemi, istek nesnesinde açıklanan değişiklik kümesinin İstek-URI'si tarafından tanımlanan kaynağa uygulanmasını talep eder. Yama belgesi adı verilen bir biçimde bir dizi değişiklik sunulur.

Daha fazla bilgi için aşağıdaki URL'ye bakın

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

En sık kullanılan HTTP fiilleri POST, GET, PUT, DELETE, bir veritabanındaki CRUD (Create, Read, Update and Delete) işlemlerine benzer. Bu HTTP fiillerini şu durumlarda belirtiyoruz: Başkent. Yani aşağıda aralarında bir karşılaştırma var.

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

YAMA: Bir kaynağın kısmen değiştirilmesini sağlar. Bir kaynak için yalnızca bir alanı güncellemeniz gerekiyorsa, PATCH yöntemini kullanabilirsiniz.

Notlar:
POST, PUT, DELETE içeriği değiştirdiğinden, aşağıdaki URL için kemancı testleri yalnızca güncellemeleri taklit eder. Aslında silmez veya değişmez. Eklemelerin, güncellemelerin, silmelerin olup olmadığını görmek için durum kodlarına bakabiliriz.

1) ALMAK:

GET, HTTP isteğinde bulunmanın en kolay yoludur; tarayıcıların bir bağlantıya her tıklandığında kullandığı veya URL'yi adres çubuğuna yazın. Sunucuya, URL tarafından tanımlanan verileri istemciye göndermesi talimatını verir. Veriler, bir GET isteği sonucunda sunucu tarafında değiştirilmemelidir. Bu anlamda, bir GET isteği salt okunurdur.

Yanıt vermek: gibi yanıt alacaksınız:

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

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

2) GÖNDERİ:

POST fiili esas olarak yaratılış yeni kaynaklar. Özellikle ikincil kaynaklar yaratırdı. Yani, başka bir (örneğin, ana) kaynağa bağlıdır.

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

Fiddler veya PostMan ile doğrulama: cevabı kontrol etmek için kemancı kullanabiliriz. Komut dosyasını açın ve Oluştur sekmesini seçin. Fiili ve URL'yi aşağıda gösterildiği gibi girin ve cevabı kontrol etmek için "Çalıştır"ı tıklayın.

İstek gövdesi:

data: (başlık: "foo", gövde: "bar", userId: 1000, Id: 1000)

Yanıt vermek. Bir 201 yanıt kodu alacaksınız.

Eklenen kaydı Id = 1000 ile kontrol etmek istiyorsak, Get fiilini değiştirin ve aynı url'yi kullanın ve Execute'a basın.

Daha önce de belirtildiği gibi, yukarıdaki URL salt okunurdur (GET), gerçek zamanlı güncellenmiş verileri okuyamıyoruz.

PUT en yaygın olarak yetenekler için kullanılır güncellemeler, Orijinal kaynağın güncellenmiş bir temsilini içeren bir istek gövdesiyle bilinen bir kaynak URI'sine PUT-ing.

Fiddler veya PostMan ile doğrulama: cevabı kontrol etmek için kemancı kullanabiliriz. Komut dosyasını açın ve Oluştur sekmesini seçin. Fiili ve URL'yi aşağıda gösterildiği gibi girin ve cevabı kontrol etmek için "Çalıştır"ı tıklayın.

İstek gövdesi:

data: (başlık: "foo", gövde: "bar", userId: 1, Id: 1)

Yanıt vermek. Başarılı bir güncellemede, PUT'tan 200 (veya gövdede herhangi bir içerik döndürmezse 204) döndürür.

4) SİL:

DELETE'in anlaşılması oldukça kolaydır. İçin kullanılır kaldırma URI tarafından tanımlanan kaynak.

Başarılı silmede, bir yanıt gövdesi, muhtemelen kaldırılan öğenin bir temsili (genellikle çok bant genişliği yoğun) veya sarılmış bir yanıt (aşağıdaki "Dönüş Değerleri"ne bakın) ile birlikte HTTP durumu 200'ü (Tamam) döndürün. Ya öyle ya da yanıt gövdesi olmadan HTTP durumu 204'ü (İÇERİK YOK) döndürün. Başka bir deyişle, önerilen yanıt, gövdesi olmayan bir 204 durumu veya JSEND tipi bir yanıt ve bir HTTP 200 durumudur.

Fiddler veya PostMan ile doğrulama: cevabı kontrol etmek için kemancı kullanabiliriz. Komut dosyasını açın ve Oluştur sekmesini seçin. Fiili ve URL'yi aşağıda gösterildiği gibi girin ve cevabı kontrol etmek için "Çalıştır"ı tıklayın.

Fiil: SİLMEK

Yanıt vermek. Başarılı silmede, yanıt gövdesiyle birlikte bir HTTP 200 (OK) durumu döndürür.

PUT ve PATCH arasındaki örnek

KOYMAK

Adımı değiştirmek zorunda kalırsam, güncellemek için bir PUT isteği gönderin:

("first": "Nazmul", "last": "hasan") Yani burada ilk ismi güncellemek için tüm data parametrelerini tekrar göndermemiz gerekiyor.

Yama isteği, verilerin diğer kısımlarını değiştirmeden veya etkilemeden yalnızca değiştirmemiz gereken verileri göndereceğimizi söylüyor. Örnek: Yalnızca adı güncellememiz gerekiyorsa, yalnızca adı geçiyoruz.

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

PUT = FULL RESOURCE'u yeni temsille değiştir

YAMA = orijinal kaynağın parçalarını sağlanan değerlerle değiştirin VE | VEYA kaynağın diğer bölümleri sağladığınız güncellenir (zaman damgaları) VE | VEYA diğer kaynaklarla güncellenmiş kaynak efektleri (ilişkiler)

GET/PUT - yetersiz bir yama bazen yetersiz olabilir

İdempotent olan, sorguyu birden çok kez çalıştırırsak sonucunu etkilememesi gerektiğidir (aynı sonuç. İneğin hamile olduğunu varsayalım ve onu tekrar doğurursak, birden çok kez hamile kalamaz).

elde etmek:-

sadece al. Sunucudan veri alın ve kullanıcıya gösterin

İleti:-

veritabanında yeni bir kaynak oluşturun. Bu, yeni veriler eklediği anlamına gelir. Bir idempotent değil.

koymak:-

Yeni bir kaynak oluşturun, aksi takdirde mevcut bir kaynak ekleyin. İdempotent çünkü her seferinde aynı kaynağı günceller ve sonuç aynı olur. eski.- ilk veri

( id:1 ad:kısmi e-posta: [e-posta korumalı] }

( id:1 e-posta: [e-posta korumalı] }

yama

şimdi yama geldi, YAMA isteği bazen yetersiz olabilir

Kimlik:1 ad:kısmi e-posta: [e-posta korumalı] }

Yama Adı: W

( id:1 ad:w e-posta: [e-posta korumalı]) HTTP Metodu GET evet POST hayır PUT evet YAMA hayır* SEÇENEKLER evet HEAD evet DELETE evet

Aşağıdaki tanım gerçek bir dünya örneğinden alınmıştır.

Örnek genel bakış
Her müşteri bilgisi için, bu müşteri verilerini bulmak için bir kimlik saklarız ve bu kimliği referans için müşteriye göndeririz.

  1. İLETİ

    • Müşteri, POST yöntemini kullanarak kimliksiz veri gönderirse, onu kaydeder ve yeni bir kimlik atarız.
    • Müşteri bunları gönderirse aynı POST yöntemini kullanarak kimliği olmayan verileri kaydedip yeni bir kimlik atadık.
    • Not: burada çoğaltmaya izin verilir
  2. KOYMAK

    • Müşteri bir tanımlayıcı ile veri gönderirse, bu tanımlayıcının var olup olmadığını kontrol edeceğiz. Kimlik varsa, verileri güncelleyeceğiz, aksi takdirde onu oluşturup yeni bir kimlik atayacağız.
    • Müşteri bir tanımlayıcı ile veri gönderirse, bu tanımlayıcının var olup olmadığını kontrol edeceğiz. Kimlik varsa, verileri güncelleyeceğiz, aksi takdirde bir istisna atacağız.

Not. yöntemde Koymak id bulunamazsa bir istisna atmıyoruz. Ama yöntemde Yama id bulunamazsa bir istisna atarız.

Yukarıdakilerle ilgili herhangi bir sorunuz varsa bana bildirin.

HTTP protokolünün POST, PUT ve PATCH yöntemleri arasındaki fark buradadır.

İLETİ

HTTP.POST yöntemi, sunucuda her zaman yeni bir kaynak oluşturur. İdempotent olmayan isteği, yani. Kullanıcı aynı istekleri 2 kez yaparsa, herhangi bir kısıtlama yoksa yeni bir kaynak oluşturacaktır.

http post yöntemi, SQL'de her zaman veritabanında yeni bir kayıt oluşturan bir INSERT sorgusu gibidir.

Örnek vermek. Arka uç sunucusu yeni kaynak için kaynak kimliğini çözdüğünde yeni kullanıcıyı, siparişi vb. depolamak için POST yöntemini kullanın.

KOYMAK

HTTP.PUT yönteminde kaynak önce URL'den tanımlanır, varsa güncellenir, aksi halde yeni bir kaynak oluşturulur. Hedef kaynak mevcut olduğunda, tamamen yeni bir gövde ile bu kaynağın üzerine yazar. Bu HTTP.PUT yöntemi, bir kaynağı OLUŞTURMAK veya GÜNCELLEMEk için kullanılır.

http put yöntemi, verilen kaydın var olup olmadığına bağlı olarak bir kaydı ekleyen veya güncelleyen SQL'deki MERGE sorgusu gibidir.

PUT isteği önemsizdir, yani. aynı sorgulara iki kez basmak, mevcut kaydı güncelleyecektir (yeni kayıt oluşturulmaz). PUT yönteminde kaynak kimliği istemci tarafından belirlenir ve istek URL'sinde belirtilir.

Örnek vermek. Mevcut bir kullanıcıyı veya siparişi güncellemek için PUT yöntemini kullanın.

YAMA

HTTP.PATCH yöntemi, bir kaynak güncellemesine, yani bir delta güncellemesine yönelik kısmi güncellemeler için kullanılır.

http yama yöntemi, SQL'de tüm satırı değil, yalnızca seçili sütunları ayarlayan veya güncelleyen bir UPDATE sorgusu gibidir.

Örnek vermek. Bir siparişin durumunu güncellemek için PATCH yöntemini kullanabilirsiniz.

YAMA/api/kullanıcılar/40450236/sipariş/10234557