REST'teki POST - POST


Al─▒nan cevaba git


HTTP / 1.1 Spesifikasyonuna g├Âre:

POST Y├Ântem k├Âkenli sunucu taraf─▒ndan tan─▒mlanan kayna─č─▒n yeni bir ikincil par├žas─▒ olarak iste─če eklenmi┼č varl─▒─ča kabul etmesini talep etmek i├žin kullan─▒l─▒r Request-URI i├žinde Request-Line

Ba┼čka bir deyi┼čle, olu┼čturmak POST i├žin kullan─▒l─▒r .

PUT Ekteki varl─▒k tedarik alt─▒nda saklanabilir y├Ântem istekleri Request-URI . E─čer Request-URI ├Ânceden var olan bir kayna─ča at─▒fta bulunulursa, ekteki varl─▒k, kaynak sunucuda bulunan─▒n de─či┼čtirilmi┼č bir s├╝r├╝m├╝ olarak de─čerlendirilmelidir. E─čer Request-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 kaynak olu┼čturabilir. "

Yani, olu┼čturmak veya g├╝ncellemek PUT i├žin kullan─▒l─▒r .

Peki, bir kaynak olu┼čturmak i├žin hangisi kullan─▒lmal─▒d─▒r? Ya da ikisini birden mi desteklemek gerekiyor?


5170





2009-03-10




Cevap say─▒s─▒n─▒ say: 30






Genel:

Hem PUT hem de POST olu┼čturmak i├žin kullan─▒labilir.

"Eylemi ne yap─▒yorsun?" Diye sormal─▒s─▒n. Ne kullanman─▒z gerekti─čini ay─▒rt etmek i├žin. 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 o zaman bunu belirli bir soruya yapars─▒n─▒z.

B├╝y├╝k ikisi de kullan─▒labilir, bu y├╝zden hangisini RESTful tasar─▒m─▒mda kullanmal─▒y─▒m:

Hem PUT hem de POST'u desteklemeniz gerekmez.

Kullan─▒lan sana kalm─▒┼č. Ancak, istekte hangi nesneye ba┼čvurdu─čunuza ba─čl─▒ olarak do─čru olan─▒ kullanmay─▒ unutmay─▒n.

Baz─▒ d├╝┼č├╝nceler:

  • URL nesnelerinize a├ž─▒k├ža olu┼čturdu─čunuz bir isim veriyor musunuz veya sunucunun karar vermesine izin veriyor musunuz? Bunlar─▒ adland─▒r─▒rsan─▒z PUT kullan─▒n. Sunucunun karar vermesine izin verirseniz POST kullan─▒n.
  • PUT ├Ânemsizdir, bu nedenle bir nesneyi iki kez PUT yazarsan─▒z, etkisi olmaz. Bu g├╝zel bir ├Âzellik, bu y├╝zden m├╝mk├╝n oldu─čunda PUT kullan─▒rd─▒m.
  • Ayn─▒ nesne URLÔÇÖsine sahip PUTÔÇÖa sahip bir kayna─č─▒ g├╝ncelleyebilir veya olu┼čturabilirsiniz.
  • POST ile, ayn─▒ anda bir URLÔÇÖde de─či┼čiklik yapmak ├╝zere gelen 2 istek olabilir ve nesnenin farkl─▒ b├Âl├╝mlerini g├╝ncelleyebilirler.

Bir ├Ârnek:

A┼ča─č─▒dakileri SO ile ilgili olarak 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/<existing_question> HTTP/1.1
Host: www.example.com/
 

A┼ča─č─▒dakilerin bir hata oldu─čunu unutmay─▒n:

 POST /questions/<new_question> HTTP/1.1
Host: www.example.com/
 

URL hen├╝z olu┼čturulmad─▒ysa, ad─▒ belirtirken olu┼čturmak i├žin POST kullanmamal─▒s─▒n─▒z. Bu, hen├╝z bulunmayan bir 'kaynak bulunamad─▒' hatas─▒yla sonu├žlanmal─▒d─▒r <new_question> . <new_question> ├ľncelikle kaynak sunucuya PUT gerekir .

Yine de POST kullanarak bir kaynak olu┼čturmak i├žin b├Âyle bir ┼čey yapabilirsiniz:

 POST /questions HTTP/1.1
Host: www.example.com/
 

Bu durumda kaynak ad─▒n─▒n belirtilmedi─čine, yeni nesnelerin URL yolunun size d├Ând├╝r├╝lece─čini unutmay─▒n.

KOYMAK:

Kaynak olu┼čturmak veya ├╝zerine yazmak i├žin kullan─▒l─▒r. Kaynaklar─▒ belirlerken yeni URL.

Yeni bir kaynak i├žin:

 PUT /questions/<new_question> HTTP/1.1
Host: www.example.com/
 

Mevcut bir kayna─č─▒n ├╝zerine yazmak i├žin:

 PUT /questions/<existing_question> HTTP/1.1
Host: www.example.com/
 

4085







─░ddialar─▒ webÔÇÖde

─░kisi de do─čru de─čil.


Daha iyisi , eylemin ├Ânemsizli─čine dayanarak PUT ile POST aras─▒nda se├žim yapmakt─▒r .

PUT , bir kaynak koymak anlam─▒na gelir; verilen URLÔÇÖde bulunanlar─▒n yerine ba┼čka bir ┼čey koymak. Tan─▒m olarak, bir PUT ├Ânemsizdir. ─░stedi─činiz kadar yap─▒n ve sonu├ž ayn─▒. x=5 idempotent. Daha ├Ânce var olup olmad─▒─č─▒na bakmak i├žin bir kaynak koyabilirsiniz (├Ârne─čin, Olu┼čtur veya G├╝ncelle)!

POST bir kayna─č─▒ g├╝nceller, yard─▒mc─▒ bir kaynak ekler veya bir de─či┼čikli─če neden olur. Bir POST, anlams─▒z olmayan bir ┼čekilde, x++ anlams─▒z de─čildir.


Bu arg├╝manla PUT, olu┼čturaca─č─▒n─▒z ┼čeyin URL'sini bildi─činiz zaman yaratma i├žindir. POST, "fabrika" n─▒n URL'sini veya olu┼čturmak istedi─činiz ┼čeyler kategorisinin y├Âneticisini bildi─činizde olu┼čturmak i├žin kullan─▒labilir.

yani:

 POST /expense-report
 

veya:

 PUT  /expense-report/10929
 

2139







  • POST bir URL'ye ├žocuk kayna─č─▒ olu┼čturur bir de sunucu tan─▒ml─▒ URL'ye.
  • Bir URLÔÇÖye PUT , kayna─č─▒ m├╝┼čteri tan─▒ml─▒ URLÔÇÖnin tamam─▒nda olu┼čturur / de─či┼čtirir .
  • Bir URLÔÇÖye PATCH , o m├╝┼čteri tan─▒ml─▒ URLÔÇÖde kayna─č─▒n bir k─▒sm─▒n─▒ g├╝nceller .

PUT ve POST i├žin ilgili ┼čartname RFC 2616 ┬ž9.5ff'dir.

POST bir alt kaynak olu┼čturur , bu y├╝zden POST /items kaynak alt─▒nda ya┼čayan bir kaynak olu┼čturur /items . ├ľrne─čin. /items/1 . Ayn─▒ posta paketini iki kez g├Ândermek iki kaynak yaratacakt─▒r.

PUT , m├╝┼čteri taraf─▒ndan bilinen bir URL'de bir kaynak olu┼čturmak veya de─či┼čtirmek i├žindir .

Bu nedenle: PUT , yaln─▒zca kaynak yarat─▒lmadan ├Ânce m├╝┼čterinin URL'yi bildi─či, CREATE i├žin adayd─▒r. ├ľrne─čin. /blogs/nigel/entry/when_to_use_post_vs_put ba┼čl─▒k kaynak anahtar─▒ olarak kullan─▒ld─▒─č─▒ndan

PUT , zaten mevcutsa, bilinen URL'deki kayna─č─▒ de─či┼čtirir, bu nedenle ayn─▒ iste─či iki kez g├Ândermenin bir etkisi olmaz. Ba┼čka bir deyi┼čle, PUT ├ža─čr─▒lar─▒ ├Ânemsizdir .

RFC ┼č├Âyle okur:

POST ve PUT talepleri aras─▒ndaki temel fark, ─░stek-URI'sinin farkl─▒ anlamlar─▒na yans─▒r. Bir POST iste─čindeki URI, eklenen varl─▒─č─▒ idare edecek kayna─č─▒ tan─▒mlar. Bu kaynak, veri kabul eden bir i┼člem, ba┼čka bir protokole a├ž─▒lan bir a─č ge├židi veya ek a├ž─▒klama kabul eden ayr─▒ bir varl─▒k olabilir. Buna kar┼č─▒l─▒k, bir PUT iste─čindeki URI, istekle ili┼čtirilen varl─▒─č─▒ tan─▒mlar - kullan─▒c─▒ temsilcisi, URIÔÇÖnin ne ama├žla yap─▒ld─▒─č─▒n─▒ bilir ve sunucu bu iste─či ba┼čka bir kayna─ča uygulamaya ├çALI┼×MAMALIDIR. Sunucu, iste─čin farkl─▒ bir URI'ya uygulanmas─▒n─▒ istiyorsa,

Not: PUT ├žo─čunlukla kaynaklar─▒ g├╝ncellemek i├žin kullan─▒lm─▒┼čt─▒r (b├╝t├╝n├╝yle de─či┼čtirilerek), ancak son zamanlarda PUT t├╝m kayna─č─▒n yerini ald─▒─č─▒n─▒ belirtti─činden, mevcut kaynaklar─▒ g├╝ncellemek i├žin PATCH kullanma y├Ân├╝nde bir hareket vard─▒r. RFC 5789.

2018 G├╝ncellemesi : PUTÔÇÖdan ka├ž─▒nmak i├žin yap─▒labilecek bir durum var. Bkz. "PUT olmadan REST"

ÔÇťPUT olmadan RESTÔÇŁ tekni─či ile, fikir, t├╝keticilerin yeni 'bildirilmi┼č' talep kaynaklar─▒ g├Ândermeye zorland─▒─č─▒ y├Ân├╝ndedir. Daha ├Ânce de belirtildi─či gibi, m├╝┼čterinin posta adresini de─či┼čtirmek, farkl─▒ bir posta adresi alan─▒ de─čerine sahip bir "M├╝┼čteri" kayna─č─▒n─▒n PUT'u de─čil, yeni bir "ChangeOfAddress" kayna─č─▒na bir POSTtur.

al─▒nan THOUGHTWORKS ait Prakash Subramaniam taraf─▒ndan Kaynak Modelleme - REST API Tasar─▒m

Bu, API'yi, tek bir kayna─č─▒ g├╝ncelleyen birden fazla m├╝┼čteri ile durum ge├ži┼či sorunlar─▒ndan ka├ž─▒nmaya zorlar ve olay kayna─č─▒ ve CQRS ile daha iyi e┼čle┼čir. ─░┼č zaman uyumsuz olarak yap─▒ld─▒─č─▒nda, d├Ân├╝┼č├╝m├╝ POSTA yapmak ve uygulanmas─▒n─▒ beklemek uygun g├Âz├╝kmektedir.


679







├ľzet:

Yaratmak:

PUT veya POST ile a┼ča─č─▒daki ┼čekilde yap─▒labilir:

KOYMAK

Olu┼čturur ile yeni bir kaynak newResourceId / kaynaklar URI veya alt─▒nda, tan─▒mlay─▒c─▒ olarak toplanmas─▒ .

 PUT /resources/<newResourceId> HTTP/1.1 
 

POST

Olu┼čturur A / kaynaklar URI veya alt─▒nda yeni bir kaynak koleksiyonu . Genelde tan─▒mlay─▒c─▒ sunucu taraf─▒ndan d├Ând├╝r├╝l├╝r.

 POST /resources HTTP/1.1
 

G├╝ncelle┼čtirme:

Can sadece ┼ču ┼čekilde PUT ile yap─▒labilir:

KOYMAK

─░le kaynak g├╝nceller existingResourceId / kaynaklar URI veya alt─▒nda, tan─▒mlay─▒c─▒ olarak koleksiyon .

 PUT /resources/<existingResourceId> HTTP/1.1
 

A├ž─▒klama:

Genel olarak REST ve URI ile u─čra┼č─▒rken, sahip jenerik ├╝zerinde solda ve spesifik ├╝zerinde sa─ča . Jenerik genellikle denir koleksiyonlar─▒ ve daha spesifik ├╝r├╝n ├ža─čr─▒labilir kaynak . Bir kayna─č─▒n bir koleksiyon i├žerebilece─čini unutmay─▒n .

├ľrnekler:

<- genel - belirli ->

 URI: website.com/users/john
website.com  - whole site
users        - collection of users
john         - item of the collection, or a resource

URI:website.com/users/john/posts/23
website.com  - whole site
users        - collection of users
john         - item of the collection, or a resource
posts        - collection of posts from john
23           - post from john with identifier 23, also a resource
 

POST kulland─▒─č─▒n─▒zda, her zaman bir koleksiyona at─▒fta bulunursunuz , bu nedenle ne zaman s├Âylerseniz:

 POST /users HTTP/1.1
 

kullan─▒c─▒ koleksiyonuna yeni bir kullan─▒c─▒ g├Ânderiyorsunuz .

Devam edip b├Âyle bir ┼čey denersen:

 POST /users/john HTTP/1.1
 

i┼če yarayacak, ancak anlamsal olarak , kullan─▒c─▒ koleksiyonunun alt─▒ndaki john koleksiyonuna bir kaynak eklemek istedi─činizi s├Âyl├╝yorsunuz .

PUT kulland─▒─č─▒n─▒zda , muhtemelen bir koleksiyon i├žinde bir kaynak veya tek bir ├Â─čeye at─▒fta bulunuyorsunuz . Demek ne zaman:

 PUT /users/john HTTP/1.1
 

Sunucu g├╝ncellemesini s├Âyl├╝yorsunuz ya da yoksa kullan─▒c─▒lar koleksiyonunun alt─▒ndaki john kayna─č─▒n─▒ olu┼čturun .

spec:

Spesifikasyonun baz─▒ ├Ânemli k─▒s─▒mlar─▒n─▒ vurgulayay─▒m:

POST

POST y├Ântemi k├Âkenli sunucu bu iste─če i├žin kullan─▒l─▒r kabul bir ┼čekilde iste─če eklenmi┼č varl─▒─ča yeni bir ikincil par├žas─▒ ─░ste─či-Line Request-URI taraf─▒ndan tan─▒mlanan kayna─č─▒n

Dolay─▒s─▒yla, yeni yarat─▒r kaynak bir ├╝st├╝nde koleksiyon .

KOYMAK

PUT kapal─▒ varl─▒k olmas─▒ y├Ântem istekleri saklanan sa─članan Request-URI alt─▒nda. ─░stek-URI's─▒ zaten var olan bir kayna─ča at─▒fta bulunuyorsa , ekteki varl─▒k , kaynak sunucuda bulunan─▒n de─či┼čtirilmi┼č bir s├╝r├╝m├╝ olarak de─čerlendirilmelidir . ─░stenen URI yoksa varolan g├Âstermiyor kaynak ve URI'n─▒n oldu─čunu yetenekli bir olarak tan─▒mlanan olma yeni kaynak talep eden kullan─▒c─▒ arac─▒s─▒ taraf─▒ndan, men┼če sunucu olabilir olu┼čturmak oldu─čunu URI ile kaynak."

Bu nedenle, kayna─č─▒n varl─▒─č─▒na ba─čl─▒ olarak olu┼čturun veya g├╝ncelleyin .

Referans:


208







"Pragmatik" tavsiyemi eklemek istiyorum. Kaydetti─činiz nesnenin al─▒nabilece─či "kimli─či" biliyorsan─▒z PUT kullan─▒n. Gelecekte arama veya g├╝ncelleme yapman─▒z i├žin iade edilmesi i├žin olu┼čturulan bir veritaban─▒na ihtiyac─▒n─▒z varsa, PUT kullan─▒m─▒ ├žok iyi ├žal─▒┼čmaz.

Yani: Mevcut bir kullan─▒c─▒y─▒ ya da istemcinin kimli─či ├╝retti─či ve kimli─či benzersiz oldu─ču do─črulanm─▒┼č bir kullan─▒c─▒y─▒ kaydetmek i├žin:

 PUT /user/12345 HTTP/1.1  <-- create the user providing the id 12345
Host: mydomain.com

GET /user/12345 HTTP/1.1  <-- return that user
Host: mydomain.com
 

Aksi takdirde, ba┼člang─▒├žta nesneyi olu┼čturmak i├žin POST'yu ve nesneyi g├╝ncellemek i├žin PUT'u kullan─▒n:

 POST /user HTTP/1.1   <--- create the user, server returns 12345
Host: mydomain.com

PUT /user/12345 HTTP/1.1  <--- update the user
Host: mydomain.com
 

170







POST "Yeni kullan─▒c─▒ yarat" anlam─▒na gelir "Burada bir kullan─▒c─▒ yaratma giri┼či, benim i├žin yarat".

PUT "Ek 5, zaten varsa de─či┼čtir", "Kullan─▒c─▒ 5 i├žin veriler" b├Âl├╝m├╝ndeki gibi.

Hen├╝z kullan─▒c─▒n─▒n URLÔÇÖsini bilmedi─činiz i├žin example.com/users adresine POST g├Ânderdiniz, sunucunun onu olu┼čturmas─▒n─▒ istiyorsunuz.

Belirli bir kullan─▒c─▒y─▒ de─či┼čtirmek / olu┼čturmak istedi─činiz i├žin example.com/users/id PUT .

Ayn─▒ verilerle iki kez POST yapmak, farkl─▒ kimlikleri olan iki ayn─▒ kullan─▒c─▒ olu┼čturmak anlam─▒na gelir. Ayn─▒ verilerle iki kez PUTing, kullan─▒c─▒y─▒ ilk olu┼čturur ve onu ikinci kez ayn─▒ duruma g├╝nceller (de─či┼čiklik yok). PUT sonras─▒nda ayn─▒ durumla sonu├žland─▒─č─▒n─▒zdan, ka├ž kez yaparsan─▒z yap─▒n, her seferinde ÔÇťe┼čit derecede g├╝├žl├╝ÔÇŁ oldu─ču s├Âylenir - idempotent. Bu, istekleri otomatik olarak yeniden denemek i├žin kullan─▒┼čl─▒d─▒r. Art─▒k taray─▒c─▒da geri d├╝─čmesine bast─▒─č─▒n─▒zda 'tekrar g├Ândermek istedi─činizden emin misiniz?'

Genel bir ├Âneri, sunucunuzun kaynaklar─▒n─▒z─▒n URL olu┼čturmas─▒n─▒ kontrol alt─▒nda tutmas─▒ gerekti─činde POST kullanmakt─▒r. Aksi halde PUT kullan─▒n. POST yerine PUT'u tercih edin.


165







Olu┼čturmak i├žin POST'yu ve g├╝ncellemek i├žin PUT'u kullan─▒n. Zaten Ruby on Rails de ├Âyle yap─▒yor.

 PUT    /items/1      #=> update
POST   /items        #=> create
 

123







Her ikisi de istemciden sunucuya veri aktar─▒m─▒ i├žin kullan─▒l─▒r, ancak bunlar aras─▒nda ince farklar vard─▒r:


Resim tan─▒m─▒n─▒ buraya girin

Analoji:

  • PUT yani almak ve oldu─ču yere koymak .
  • POST postanede posta olarak g├Ânder .


g├Âr├╝nt├╝ tan─▒m─▒n─▒ buraya girin

Sosyal Medya / A─č Analojisi:

  • Sosyal medyada yay─▒nla : mesaj g├Ânderdi─čimizde yeni yaz─▒ yarat─▒r.
  • Daha ├Ânce g├Ândermi┼č oldu─čumuz mesaj i├žin (├Âr. D├╝zenle) koyun .

113







REST ├žok ├╝st d├╝zey bir konsepttir. Asl─▒nda, HTTP bile hi├ž bahsetmiyor!

HTTP'de REST'i nas─▒l uygulayaca─č─▒n─▒za dair herhangi bir ┼č├╝pheniz varsa, Atom Yay─▒n Protokol├╝ (AtomPub) ┼čartnamesine her zaman bir g├Âz atabilirsiniz . AtomPub, RESTful web servislerini bir├žok HTTP ve REST armat├╝r├╝ taraf─▒ndan geli┼čtirilen HTTP ile yazmak i├žin bir standartt─▒r, bir k─▒sm─▒ REST'in mucidi Roy Fielding, ve HTTP'nin kendisinin mucidi Roy Fielding'den girdi.

Asl─▒nda, AtomPub'─▒ do─črudan bile kullanabilirsiniz. Blog toplulu─čundan ├ž─▒karken bloglama ile s─▒n─▒rl─▒ de─čildir: HTTP ├╝zerinden rastgele kaynaklar─▒n rasgele (i├ž i├že ge├žmi┼č) koleksiyonlar─▒yla RESTfully etkile┼čime ge├žmek i├žin kullan─▒lan genel bir protokold├╝r. Uygulaman─▒z─▒ i├ž i├že ge├žmi┼č bir kaynak koleksiyonu olarak temsil edebiliyorsan─▒z, AtomPub'─▒ yaln─▒zca kullanabilir ve PUT veya POST kullan─▒p kullanmama, hangi HTTP Durum Kodlar─▒n─▒n geri d├Ânece─či ve t├╝m bu ayr─▒nt─▒lar─▒n ne oldu─ču konusunda endi┼če duymazs─▒n─▒z.

AtomPub'─▒n kaynak yaratma 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.


65







HTTP + REST API'si olan bir sunucuda bir kaynak olu┼čturmak i├žin PUT veya POST kullan─▒p kullanmama karar─▒, URL yap─▒s─▒n─▒n kime ait oldu─čuna dayan─▒r. M├╝┼čterinin bilmesi veya tan─▒mlamaya kat─▒lmas─▒n─▒n ard─▒ndan, URL yap─▒s─▒, SOA'dan ortaya ├ž─▒kan istenmeyen ba─člara benzeyen gereksiz bir ba─čd─▒r. Ka├žan kavrama tipleri REST'in bu kadar pop├╝ler olmas─▒n─▒n nedenidir. Bu nedenle, kullan─▒lacak uygun y├Ântem POST'tur. Bu kural─▒n istisnalar─▒ vard─▒r ve m├╝┼čteri, yayd─▒─č─▒ kaynaklar─▒n konum yap─▒s─▒ ├╝zerinde kontrol├╝ elinde tutmak istedi─činde ortaya ├ž─▒kar. Bu nadirdir ve muhtemelen ba┼čka bir ┼čeyin yanl─▒┼č oldu─ču anlam─▒na gelir.

Bu noktada baz─▒ insanlar RESTful-URL'lerin kullan─▒lmas─▒ durumunda m├╝┼čterinin kayna─č─▒n URL'sini bildi─čini ve bu nedenle PUT'nin kabul edilebilir oldu─čunu iddia edeceklerdir . Sonu├žta, bu nedenle kanonik, normalize, Ruby on Rails, Django URL'leri ├Ânemlidir, Twitter API'sine bak─▒nÔÇŽ blah blah blah. Bu insanlar─▒n anlamalar─▒ gereken bir Restful-URL diye bir ┼čey yoktur ve Roy Fielding'in kendisinin ┼čunu s├Âyledi─či :

Bir REST API, sabit kaynak adlar─▒n─▒ veya hiyerar┼čilerini tan─▒mlamamal─▒d─▒r (m├╝┼čteri ve sunucunun bariz bir ┼čekilde birle┼čtirilmesi). Sunucular kendi ad alanlar─▒n─▒ denetleme ├Âzg├╝rl├╝─č├╝ne sahip olmal─▒d─▒r. Bunun yerine, sunuculara, istemcileri ortam t├╝rleri i├žinde ve bu ili┼čkileri tan─▒mlayarak tan─▒mlayarak HTML formlar─▒nda ve URI ┼čablonlar─▒nda oldu─ču gibi uygun URI'lar─▒n nas─▒l olu┼čturulaca─č─▒ konusunda talimat vermelerine izin verin. [Buradaki ba┼čar─▒s─▒zl─▒k, m├╝┼čterilerin, RPC'nin i┼člevsel e┼čle┼čmesine veri odakl─▒ bir e┼čde─čer olan, alana ├Âzg├╝ bir standart gibi, bant d─▒┼č─▒ bilgilerden kaynaklanan bir kaynak yap─▒s─▒n─▒ varsayd─▒─č─▒ anlam─▒na gelir].

http://roy.gbiv.com/untangled/2008/rest-apis-must-be-hypertext-driven

Bir RESTful-URL fikri , sunucu URL yap─▒s─▒ndan sorumlu oldu─ču i├žin REST'in ihlalidir ve kuplajdan ka├ž─▒nmak i├žin nas─▒l kullan─▒laca─č─▒na karar vermekte ├Âzg├╝r olmal─▒d─▒r. Bu kar─▒┼č─▒kl─▒k varsa, kendini ke┼čfetmenin API tasar─▒m─▒ ├╝zerindeki ├Ânemini okudun.

POST, kaynaklar─▒ olu┼čturmak i├žin kullanmak, tasar─▒m d├╝┼č├╝ncesiyle birlikte gelir; ├ž├╝nk├╝ POST ba─č─▒ms─▒z de─čildir. Bu, bir POST'u birka├ž kez tekrarlaman─▒n, her seferinde ayn─▒ davran─▒┼č─▒ garanti etmedi─či anlam─▒na gelir. Bu, insanlar─▒ gerekti─činde kaynaklar─▒ olu┼čturmak i├žin PUT kullanmaya korkutuyor. Yanl─▒┼č oldu─čunu biliyorlar (POST CREATE i├žin) ama yine de yap─▒yorlar ├ž├╝nk├╝ bu problemi nas─▒l ├ž├Âzeceklerini bilmiyorlar. Bu endi┼če a┼ča─č─▒daki durumda g├Âsterilmi┼čtir:

  1. ─░stemci POST sunucuya yeni bir kaynak.
  2. Sunucu iste─či i┼čler ve bir yan─▒t g├Ânderir.
  3. M├╝┼čteri hi├žbir zaman yan─▒t alamaz.
  4. Sunucu, istemcinin yan─▒t alamad─▒─č─▒n─▒ bilmiyor.
  5. ─░stemcinin kaynak i├žin bir URL'si yoktur (bu nedenle PUT bir se├ženek de─čildir) ve POST'u tekrarlar.
  6. POST ba─č─▒ms─▒z ve sunucu de─čilÔÇŽ

6. Ad─▒m, insanlar─▒n ne yapacaklar─▒ hakk─▒nda s─▒k s─▒k kar─▒┼čt─▒─č─▒ yerdir. Ancak, bu sorunu ├ž├Âzmek i├žin bir ├žamur olu┼čturmak i├žin hi├žbir neden yoktur. Bunun yerine, HTTP RFC 2616'da belirtildi─či ┼čekilde kullan─▒labilir ve sunucu cevap verir:

10.4.10 409 Uyu┼čmazl─▒k

─░stek, kayna─č─▒n mevcut durumu ile bir ├žak─▒┼čma nedeniyle tamamlanamad─▒. Bu koda yaln─▒zca kullan─▒c─▒n─▒n anla┼čmazl─▒─č─▒ ├ž├Âzmesi ve iste─či yeniden g├Ândermesi beklenen durumlarda izin verilir. Tepki g├Âvdesi yeterince i├žermelidir

Kullan─▒c─▒n─▒n ├žat─▒┼čma kayna─č─▒n─▒ tan─▒mas─▒ i├žin bilgi. ─░deal olarak, yan─▒t varl─▒─č─▒, sorunu ├ž├Âzmesi i├žin kullan─▒c─▒ veya kullan─▒c─▒ arac─▒s─▒ i├žin yeterli bilgiyi i├žerecektir; Ancak, bu m├╝mk├╝n olmayabilir ve gerekli de─čildir.

Bir PUT iste─čine cevaben uyu┼čmazl─▒klar─▒n ortaya ├ž─▒kmas─▒ daha olas─▒d─▒r. ├ľrne─čin, s├╝r├╝m kullan─▒l─▒yorsa ve PUT olan varl─▒k daha ├Ânceki (├╝├ž├╝nc├╝ taraf) bir istekte bulunanlarla ├žak─▒┼čan bir kaynaktan yap─▒lan de─či┼čiklikleri i├žeriyorsa, sunucu iste─či tamamlayamayaca─č─▒n─▒ belirtmek i├žin 409 yan─▒t─▒n─▒ kullanabilir . Bu durumda, cevap varl─▒─č─▒ b├╝y├╝k olas─▒l─▒kla iki versiyon aras─▒ndaki cevaplar─▒n Content-Type taraf─▒ndan tan─▒mlanan formatta bir listesini i├žerir.

409 Uyu┼čmazl─▒k durum kodu ile cevap vermek, do─čru yoldur ├ž├╝nk├╝ :

  • Zaten sistemde bulunan bir kayna─ča uyan bir kimli─či olan bir veri POST'sini ger├žekle┼čtirmek ÔÇťkayna─č─▒n ┼ču anki durumuyla bir ├žak─▒┼čmad─▒rÔÇŁ.
  • ├ç├╝nk├╝ ├Ânemli k─▒s─▒m, m├╝┼čterinin sunucuyu anlamas─▒ ve kayna─ča sahip olmas─▒ i├žin gerekli ├Ânlemleri almas─▒d─▒r. Bu, ÔÇťkullan─▒c─▒n─▒n anla┼čmazl─▒─č─▒ ├ž├Âzmesi ve iste─či yeniden g├Ândermesi beklenebilirÔÇŁ durumudur.
  • Kaynak URL'sini ve ├žak─▒┼čan ID'yi i├žeren ve kaynak i├žin uygun ├Ân ko┼čullar─▒ i├žeren bir cevap, RFC 2616 i├žin ideal bir durum olan ÔÇťsorunu ├ž├Âzmek i├žin kullan─▒c─▒ veya kullan─▒c─▒ arac─▒s─▒ i├žin yeterli bilgiÔÇŁ sa─člayacakt─▒r.

RFC 7231'in 2616 De─či┼čtir'e s├╝r├╝m├╝ne ba─čl─▒ olarak g├╝ncelleme

RFC 7231 , 2616'y─▒ de─či┼čtirmek ├╝zere tasarlanm─▒┼čt─▒r ve B├Âl├╝m 4.3.3'te bir POST i├žin olas─▒ yan─▒t─▒ takip etmeyi a├ž─▒klar.

Bir POST i┼člemenin sonucu, mevcut bir kayna─č─▒n temsiline e┼čde─čerse, bir ba┼člang─▒├ž ÔÇőÔÇősunucusu MAY, Konum kayna─č─▒nda mevcut kayna─č─▒n tan─▒mlay─▒c─▒s─▒na 303 (Di─čerine bak─▒n─▒z) yan─▒t─▒ g├Ândererek kullan─▒c─▒ kayna─č─▒n─▒ bu kayna─ča y├Ânlendirebilir. Bu, kullan─▒c─▒ arac─▒s─▒na bir kaynak tan─▒t─▒c─▒s─▒ sa─člama ve g├Âsterimi payla┼č─▒lan ├Ânbelle─če alma i├žin daha uygun bir y├Ântemle aktarma avantajlar─▒na sahiptir, ancak kullan─▒c─▒ arac─▒s─▒ zaten temsili ├Ânbelle─če almad─▒ysa, fazladan bir iste─čin ├╝creti kar┼č─▒l─▒─č─▒nda.

┼×imdi bir POST'un tekrarlanmas─▒ durumunda bir 303 d├Ând├╝rmek cazip gelebilir. Ancak, bunun tersi ge├žerlidir. Bir 303 d├Ând├╝rmek, yaln─▒zca birden ├žok olu┼čturma iste─či (farkl─▒ kaynaklar olu┼čturarak) ayn─▒ i├žeri─či d├Ând├╝r├╝rse anlaml─▒d─▒r. Bir ├Ârnek, m├╝┼čterinin her seferinde yeniden indirmesi gerekmeyen "istek iletinizi g├Ânderdi─činiz i├žin te┼čekk├╝r ederiz" olabilir. RFC 7231, B├Âl├╝m 4.2.2'de POST'un ge├žerli olmad─▒─č─▒na ve POST'un olu┼čturma i├žin kullan─▒lmas─▒ gerekti─čini s├╝rd├╝rmeye devam etmemesine devam etmektedir.

Bu konuda daha fazla bilgi i├žin bu makaleyi okuyun .


60







Bu tavsiyeyi be─čendim, RFC 2616'n─▒n PUT tan─▒m─▒ndan :

POST ve PUT talepleri aras─▒ndaki temel fark, ─░stek-URI'sinin farkl─▒ anlamlar─▒na yans─▒r. Bir POST iste─čindeki URI, eklenen varl─▒─č─▒ idare edecek kayna─č─▒ tan─▒mlar. Bu kaynak, veri kabul eden bir i┼člem, ba┼čka bir protokole a├ž─▒lan bir a─č ge├židi veya ek a├ž─▒klama kabul eden ayr─▒ bir varl─▒k olabilir. Buna kar┼č─▒l─▒k, bir PUT iste─čindeki URI, istekle ili┼čtirilen varl─▒─č─▒ tan─▒mlar - kullan─▒c─▒ temsilcisi, URIÔÇÖnin ne ama├žla yap─▒ld─▒─č─▒n─▒ bilir ve sunucu bu iste─či ba┼čka bir kayna─ča uygulamaya ├çALI┼×MAMALIDIR.

Buradaki di─čer tavsiyelerle birlikte, PUT en iyi halihaz─▒rda ad─▒ olan kaynaklara uygulan─▒r ve POST mevcut bir kaynak alt─▒nda yeni bir nesne olu┼čturmak i├žin iyidir (ve sunucunun ismini bildirmesine izin verir).

Bunu ve PUT'taki iddias─▒zl─▒k gereksinimlerini ┼ču ┼čekilde yorumluyorum:

  • POST bir koleksiyonun alt─▒nda yeni nesneler olu┼čturmak i├žin iyidir (ve yaratman─▒n iddias─▒z olmas─▒ gerekmez)
  • PUT, mevcut nesneleri g├╝ncellemek i├žin iyidir (ve g├╝ncellemenin kesin olmas─▒ gerekir)
  • POST, var olan nesnelere yap─▒lan iddias─▒z g├╝ncellemeler i├žin de kullan─▒labilir (├Âzellikle, her ┼čeyi belirtmeden bir nesnenin bir b├Âl├╝m├╝n├╝ de─či┼čtirmek - e─čer d├╝┼č├╝n├╝rseniz, bir koleksiyonun yeni bir ├╝yesini olu┼čturmak asl─▒nda bu t├╝rden ├Âzel bir durumdur. koleksiyonun bak─▒┼č a├ž─▒s─▒ndan g├╝ncelleme
  • PUT, olu┼čturma i┼čleminde yaln─▒zca istemcinin kayna─č─▒ adland─▒rmas─▒na izin verirseniz kullan─▒labilir. Ancak, REST istemcilerinin URL yap─▒s─▒ hakk─▒nda varsay─▒mlarda bulunmamas─▒ gerekti─či i├žin, ama├žlanan ┼čeylerde bu daha azd─▒r.

53







K─▒sacas─▒:

PUT , ayn─▒ i┼člem bir veya birden ├žok kez y├╝r├╝t├╝l├╝rse kaynak durumunun ayn─▒ olaca─č─▒ kadar ├Ânemsizdir.

POST , ba─č─▒ms─▒z bir i┼člem de─čildir; i┼člem, tek bir seferde yap─▒lan i┼člemle kar┼č─▒la┼čt─▒r─▒ld─▒─č─▒nda birden fazla kez y├╝r├╝t├╝l├╝rse kaynak durumunun farkl─▒ olabilece─či durumlarda.

Veri taban─▒ sorgusu ile analoji

PUT "G├ťNCELLEME ├ľ─×RENC─░ SET─░ adresine benzer ┼čekilde d├╝┼č├╝nebilirsiniz" = abc "id =" 123 ";

POST "├ľ─×RENC─░NE INSERT (isim, adres) DE─×ERLER─░ (" abc "," xyzzz ");

├ľ─črenci Kimli─či otomatik olarak olu┼čturulur.

PUT ile, ayn─▒ sorgu birden ├žok kez veya bir defa y├╝r├╝t├╝l├╝rse, ├ľ─×RENC─░ tablosu durumu ayn─▒ kal─▒r.

POST durumunda, ayn─▒ sorgu birden ├žok kez y├╝r├╝t├╝l├╝rse, veritaban─▒nda birden fazla ├ľ─črenci kayd─▒ olu┼čturulur ve veritaban─▒ durumu bir "INSERT" sorgusunun her y├╝r├╝t├╝lmesinde de─či┼čir.

NOT: PUT, g├╝ncellemenin yap─▒lmas─▒ gereken bir kaynak konumuna (zaten-kaynak) ihtiya├ž duyar, ancak POST bunu gerektirmez. Bu nedenle sezgisel olarak POST, yeni bir kayna─č─▒n yarat─▒lmas─▒ i├žindir, oysa mevcut kayna─č─▒n g├╝ncellenmesi i├žin PUT'a ihtiya├ž vard─▒r.

Baz─▒ g├╝ncellemeler POST ile ger├žekle┼čtirilebilir. G├╝ncelleme i├žin hangisinin, hangisinin yarat─▒lmas─▒ i├žin kullan─▒laca─č─▒ konusunda kesin bir kural yoktur. Yine bunlar s├Âzle┼čmelerdir ve sezgisel olarak yukar─▒da belirtilen ak─▒l y├╝r├╝tmeye meyilliyim ve onu takip ediyorum.


47







POST bir posta kutusuna bir mektup g├Ândermek ya da bir e-posta kuyru─čuna bir e-posta g├Ândermek gibidir. PUT, k├╝bik bir deli─če veya raftaki bir yere (bilinen bir adrese sahip) bir nesneyi yerle┼čtirmek gibidir.

POST ile QUEUE veya COLLECTION adresine g├Ânderiyorsunuz. PUT ile, ITEM'in adresini giriyorsunuz.

PUT ├Ânemsizdir. ─░ste─či 100 kez g├Ânderebilirsin ve bunun ├Ânemi olmaz. POST ba─č─▒ms─▒z de─čil. ─░ste─či 100 kez g├Ânderirseniz, posta kutunuza 100 e-posta veya 100 mektup g├Ânderilir.

Genel bir kural: Maddenin kimli─čini veya ismini biliyorsan─▒z, PUT kullan─▒n. ├ľ─čenin kimli─činin veya ad─▒n─▒n al─▒c─▒ taraf├ža atanmas─▒n─▒ istiyorsan─▒z, POST kullan─▒n.


POST ve PUT'a kar┼č─▒


43







Yeni cevap (┼čimdi REST'i daha iyi anlad─▒─č─▒m i├žin):

PUT, yaln─▒zca bundan sonra, m├╝┼čteri taraf─▒ndan tan─▒mlanan kayna─č─▒n sunumunu yapmak i├žin hizmetin hangi i├žeri─či kullanmas─▒ gerekti─činin bir ifadesidir; POST, bundan sonra, hizmetin hangi i├žeri─če sahip olmas─▒ gerekti─čini (muhtemelen ├žo─čalt─▒lm─▒┼č) i├žermesi gerekti─činin bir ifadesidir ancak bu i├žeri─čin nas─▒l tan─▒mlanaca─č─▒ sunucuya ba─čl─▒d─▒r.

PUT x ( x bir kayna─č─▒ tan─▒mlarsa ): "Tan─▒mlad─▒─č─▒m kayna─č─▒n i├žeri─čini i├žeri─čimle de─či┼čtir x ."

PUT x ( x bir kayna─č─▒ tan─▒mlamazsa): "─░├žeri─čimi i├žeren yeni bir kaynak olu┼čturun ve x tan─▒mlamak i├žin kullan─▒n ."

POST x : "─░├žeri─čimi sakla ve bana bahsedilen i├žeri─či i├žeren (muhtemelen ba┼čka bir i├žerikle kar─▒┼čt─▒r─▒lm─▒┼č) bir kayna─č─▒ (eski veya yeni) tan─▒mlamak i├žin kullanabilece─čim bir tan─▒mlay─▒c─▒ ver. Ad─▒ ge├žen kaynak x tan─▒mlayan─▒n ayn─▒s─▒ veya alt─▒nda olmal─▒d─▒r ." " Y 'in kaynak ba─čl─▒ oldu─čunu X tipik olarak, ama zorunlu olarak yaparak uygulanmad─▒ s kaynak'" y bir alt yolunu x (├Ârne─čin X = /foo ve Y = /foo/bar ) ile temsil (ler) de─či┼čtirerek X varl─▒─č─▒n─▒ yans─▒tacak 'in kaynak Yeni bir kayna─č─▒n, ├Ârne─čin, y kayna─č─▒na ve baz─▒ meta verilere bir k├Âpr├╝ ile . URL'lerin REST'te opak olmas─▒ nedeniyle yaln─▒zca ikincisi ger├žekten iyi bir tasar─▒m i├žin ├žok ├Ânemlidir - hizmeti yine de ge├žmek i├žin istemci taraf─▒ URL yap─▒s─▒ yerine hypermedia kullanman─▒z gerekir.

REST'te "i├žerik" i├žeren bir kaynak diye bir ┼čey yoktur. Hizmetin tutarl─▒ bir ┼čekilde sunum yapmak i├žin kulland─▒─č─▒ verilere "i├žerik" denir. Genellikle, bir veritaban─▒ndaki veya dosyadaki ilgili baz─▒ sat─▒rlardan olu┼čur (├Ârn. Bir g├Âr├╝nt├╝ dosyas─▒). Kullan─▒c─▒n─▒n i├žeri─čini, hizmetin kullanabilece─či bir ┼čeye, ├Ârne─čin bir JSON y├╝k├╝n├╝ SQL ifadelerine d├Ân├╝┼čt├╝rmek hizmete ba─čl─▒d─▒r.

Orijinal cevap (okunmas─▒ daha kolay olabilir) :

PUT /something (e─čer /something zaten varsa): "Sahip olduklar─▒n─▒ al /something ve sana verdiklerimi de─či┼čtir."

PUT /something (e─čer /something zaten mevcut de─čilse): "Sana verdiklerimi al ve ona ver /something ."

POST /something : " /something Sana verdiklerimi al ve bitince bana URL'sini verdi─čin s├╝rece istedi─čin yere koy ."


39







K─▒sa cevap:

Basit kural: Olu┼čturmak i├žin POST'u, g├╝ncellemek i├žin PUT'u kullan─▒n.

Uzun cevap:

POST:

  • POST, sunucuya veri g├Ândermek i├žin kullan─▒l─▒r.
  • Kayna─č─▒n URL'si bilinmedi─činde kullan─▒┼čl─▒d─▒r

KOYMAK:

  • PUT durumu sunucuya aktarmak i├žin kullan─▒l─▒r
  • Bir kayna─č─▒n URLÔÇÖsi bilindi─činde kullan─▒┼čl─▒d─▒r

Daha Uzun Cevap:

Bunu anlamak i├žin neden PUT'a ihtiya├ž duyuldu─čunu, PUT'un bu POST'u ├ž├Âzmeye ├žal─▒┼čt─▒─č─▒ sorunlar─▒n neler oldu─čunu sormam─▒z gerekiyor.

REST mimarisinin bak─▒┼č a├ž─▒s─▒na g├Âre ├Ânemli olan hi├žbir ┼čey yoktur. PUT'suz da ya┼čayabilirdik. Ancak bir m├╝┼čteri geli┼čtiricisinin bak─▒┼č a├ž─▒s─▒na g├Âre hayat─▒n─▒ ├žok daha kolay hale getirdi.

PUT'den ├Ânce, istemciler sunucunun olu┼čturdu─ču URLÔÇÖyi veya sunucuya g├Ânderilecek verilerin zaten g├╝ncellenip g├╝ncellenmedi─čini veya t├╝m├╝ olu┼čturduysa, do─črudan bilemezlerdi. PUT, t├╝m bu ba┼č a─čr─▒lar─▒n─▒n geli┼čtiricisini rahatlatt─▒. PUT ├Ânemsizdir, PUT yar─▒┼č ko┼čullar─▒n─▒ ele al─▒r ve PUT m├╝┼čterinin URL'yi se├žmesine izin verir.


38







Ruby on Rails 4.0, k─▒smi g├╝ncellemeler yapmak i├žin PUT yerine 'PATCH' y├Ântemini kullanacakt─▒r.

RFC 5789 PATCH hakk─▒nda (1995ÔÇÖten beri):

Birlikte ├žal─▒┼čabilirli─či art─▒rmak ve hatalar─▒ ├Ânlemek i├žin yeni bir y├Ântem gerekir. PUT y├Ântemi, tamamen yeni bir g├Âvdeye sahip bir kayna─č─▒n ├╝zerine yazmak i├žin ├Ânceden tan─▒mlanm─▒┼čt─▒r ve k─▒smi de─či┼čiklikler yapmak i├žin tekrar kullan─▒lamaz. Aksi takdirde, proxy'ler ve ├Ânbellekleri, hatta istemciler ve sunucular bile i┼člemin sonucunda kar─▒┼čt─▒rabilir. POST zaten kullan─▒l─▒yor ancak kapsaml─▒ birlikte ├žal─▒┼čabilirlik olmadan (birincisi, yama format─▒ deste─čini ke┼čfetmenin standart bir yolu yok). PATCH daha ├Ânceki HTTP spesifikasyonlar─▒nda belirtildi, ancak tamamen tan─▒mlanmad─▒.

" Kenar Raylar─▒: PATCH, g├╝ncellemeler i├žin yeni birincil HTTP y├Ântemidir " diye a├ž─▒kl─▒yor.


36







Zaten s├Âz konusu olmu┼čtur neyi restating riskini g├Âze alarak, unutulmamal─▒d─▒r g├Âr├╝n├╝yor PUT hangi m├╝┼čteri kontrolleri ima URL bir kaynak olu┼čtururken sonuna kadar gidiyor, varl─▒k. Dolay─▒s─▒yla, PUT ve POST aras─▒ndaki se├žimin bir k─▒sm─▒, URL ┼čeman─▒z ne olursa olsun , m├╝┼čteriye URLÔÇÖnin do─čru, normalle┼čtirilmi┼č URLÔÇÖsini sa─člama konusunda ne kadar g├╝venebilece─činiz konusunda olacakt─▒r .

M├╝┼čteriye do─čru ┼čeyi yapmak i├žin tam olarak g├╝venemedi─činiz zaman, yeni bir ├Â─če olu┼čturmak i├žin POST kullanmak ve ard─▒ndan URL'yi yan─▒tta m├╝┼čteriye geri g├Ândermek daha uygun olacakt─▒r .


27







├çok basit bir ┼čekilde Facebook zaman ├žizelgesinin ├Ârne─čini al─▒yorum.

Durum 1: Zaman ├žizelgenize bir ┼čey g├Ânderdi─činizde, bu yeni bir giri┼č. Bu nedenle, POST y├Ântemi belirsiz oldu─čundan POST y├Ântemini kullan─▒rlar.

Durum 2: Arkada┼č─▒n─▒z g├Ânderi hakk─▒nda ilk kez yorum yaparsa, POST y├Ânteminin kullan─▒lmas─▒ da veritaban─▒nda yeni bir giri┼č olu┼čturur.

Durum 3: Arkada┼č─▒n─▒z yorumunu d├╝zenlerse, bu durumda, bir yorum kimlikleri vard─▒, bu nedenle veritaban─▒na yeni bir giri┼č olu┼čturmak yerine varolan bir yorumu g├╝ncelleyecekler. Bu nedenle, bu t├╝r bir i┼člem i├žin PUT y├Ântemini kullan─▒n;

Tek bir sat─▒r olarak, kullanmak POST eklemek i├žin yeni bir giri┼č veritaban─▒nda ve PUT i├žin g├╝ncelleme veritaban─▒nda ┼čey.


24







En ├Ânemli husus g├╝venilirliktir . Bir POST mesaj─▒ kaybolursa, sistemin durumu tan─▒ms─▒zd─▒r. Otomatik kurtarma imkans─▒zd─▒r. PUT mesajlar─▒nda, durum yaln─▒zca ilk ba┼čar─▒l─▒ deneme s├╝r├╝m├╝ne kadar tan─▒ms─▒zd─▒r.

├ľrne─čin, POST ile kredi kart─▒ i┼člemleri olu┼čturmak iyi bir fikir olmayabilir.

Kayna─č─▒n─▒zda otomatik olarak olu┼čturulan URI'lar varsa, istemciye olu┼čturulan bir URI'yi (bo┼č bir kayna─ča i┼čaret ederek) ileterek PUT'u kullanabilirsiniz.

Di─čer baz─▒ d├╝┼č├╝nceler:

  • POST, t├╝m kayna─č─▒n ├Ânbelle─če al─▒nm─▒┼č kopyalar─▒n─▒ ge├žersiz k─▒lar (daha iyi tutarl─▒l─▒k)
  • PUT yan─▒tlar─▒ ├Ânbelle─če al─▒namaz, POST cevaplar─▒ ise (─░├žerik-Konum ve s├╝re sonu gerektir)
  • PUT, ├Ârne─čin Java ME, eski taray─▒c─▒lar ve g├╝venlik duvarlar─▒ taraf─▒ndan daha az desteklenir.

21







Ba┼čkalar─▒ taraf─▒ndan ├Ânerilen farkl─▒l─▒klara ek olarak, bir tane daha eklemek istiyorum.

Gelen POST y├Ântemiyle size v├╝cut params g├Ânderebilir form-data

Gelen PUT y├Ântemiyle size v├╝cut params g├Ândermek zorunda x-www-form-urlencoded

Ba┼čl─▒k Content-Type:application/x-www-form-urlencoded

Buna g├Âre, PUT y├Ânteminde dosya veya ├žok par├žal─▒ veri g├Ânderemezsiniz.

D├ťZENLE

"Application / x-www-form-urlencoded" i├žerik t├╝r├╝ ASCII olmayan karakterler i├žeren b├╝y├╝k miktarlarda ikili veri veya metin g├Ândermek i├žin yetersizdir. "Multipart / form-data" i├žerik t├╝r├╝, dosyalar─▒, ASCII olmayan verileri ve ikili verileri i├žeren formlar─▒ g├Ândermek i├žin kullan─▒lmal─▒d─▒r.

G├Ândermek zorunda kal─▒rsan

dosyalar, ASCII olmayan veriler ve ikili veriler

POST y├Ântemini kullanmal─▒s─▒n


16







REST servisleri i├žin HTTP POST yerine HTTP PUT y├Ânteminin ne zaman kullan─▒laca─č─▒ konusunda her zaman bir kar─▒┼č─▒kl─▒k oldu─ču g├Âr├╝l├╝yor. ├ço─ču geli┼čtirici, CRUD i┼člemlerini do─črudan HTTP y├Ântemleriyle ili┼čkilendirmeye ├žal─▒┼čacakt─▒r. Bunun do─čru olmad─▒─č─▒n─▒ ve birisinin sadece CRUD kavramlar─▒n─▒ HTTP y├Ântemleriyle ili┼čkilendiremeyece─čini savunaca─č─▒m. Yani:

 Create => HTTP PUT
Retrieve => HTTP GET
Update => HTTP POST
Delete => HTTP DELETE
 

CRUD i┼člemlerinin R (etrieve) ve D (se├žkin) s─▒ras─▒yla do─črudan GET ve DELETE HTTP y├Ântemleriyle e┼čle┼čtirilebilece─či do─črudur. Bununla birlikte, kar─▒┼č─▒kl─▒k C (reate) ve U (g├╝ncelleme) i┼člemlerinde yatmaktad─▒r. Baz─▒ durumlarda, POUT olu┼čturmak i├žin kullanabilirsiniz, di─čer durumlarda ise POST gerekir. Belirsizlik, bir HTTP POUT y├Ânteminin aksine bir HTTP PUT y├Ânteminin tan─▒m─▒nda yatmaktad─▒r.

HTTP 1.1 spesifikasyonlar─▒na g├Âre, GET, HEAD, DELETE ve PUT metotlar─▒ kesin ve POST metodu da kesin olmamal─▒d─▒r. Ba┼čka bir deyi┼čle, bir kaynakta bir ya da bir├žok kez ger├žekle┼čtirilebiliyorsa ve her zaman bu kayna─č─▒n ayn─▒ durumunu d├Ând├╝r├╝rse, bir i┼člemin ├Ânemsiz oldu─ču anlam─▒na gelir. Oysa iddias─▒z bir i┼člem, kayna─č─▒n de─či┼čtirilmi┼č bir halini bir istekten di─čerine geri verebilir. Dolay─▒s─▒yla, belirsiz olmayan bir operasyonda, birinin ayn─▒ kaynak durumunu alaca─č─▒n─▒n garantisi yoktur.

Yukar─▒daki idempotent tan─▒m─▒na dayanarak, REST hizmetleri i├žin HTTP POST y├Ântemini kullanmaya kar┼č─▒ HTTP PUT y├Ântemini kullanmaya devam ediyorum:

 The client includes all aspect of the resource including the unique identifier to uniquely identify the resource. Example: creating a new employee.
The client provides all the information for a resource to be able to modify that resource.This implies that the server side does not update any aspect of the resource (such as an update date).
 

Her iki durumda da, bu i┼člemler ayn─▒ sonu├žlarla birden ├žok kez ger├žekle┼čtirilebilir. Bu, i┼člemin bir defadan fazla talep edilmesiyle kaynaklar─▒n de─či┼čmeyece─čidir. Bu nedenle, ger├žek bir kesin i┼člem. HTTP POST y├Ântemini ┼ču durumlarda kullan─▒n:

 The server will provide some information concerning the newly created resource. For example, take a logging system. A new entry in the log will most likely have a numbering scheme which is determined on the server side. Upon creating a new log entry, the new sequence number will be determined by the server and not by the client.
On a modification of a resource, the server will provide such information as a resource state or an update date. Again in this case not all information was provided by the client and the resource will be changing from one modification request to the next. Hence a non idempotent operation.
 

Sonu├ž

CRUD i┼člemlerini do─črudan REST hizmetleri i├žin HTTP y├Ântemleriyle ili┼čkilendirmeyin ve e┼čle┼čtirmeyin. Bir HTTP PUT y├Ânteminin bir HTTP POST y├Ântemine kar┼č─▒ kullan─▒lmas─▒, bu i┼člemin belirsiz y├Ân├╝ne dayanmal─▒d─▒r. Di─čer bir deyi┼čle, i┼člem ba┼čar─▒l─▒ de─čilse, HTTP PUT y├Ântemini kullan─▒n. ─░┼člem ├Ânemsiz de─čilse, HTTP POST y├Ântemini kullan─▒n.


14







Bu konudaki yeni okuyucular , yapman─▒z gerekenler hakk─▒ndaki sonsuz tart─▒┼čma ve deneyimlerden ├ž─▒kar─▒lan derslerin g├Âreceli yoklu─čundan etkilenecek. REST'in SOAP'a g├Âre "tercih edilmesi" ger├že─či, san─▒r─▒m, deneyimden y├╝ksek d├╝zeyde bir ├Â─črenmedir, fakat oradan ilerledik mi? 2016. Roy'un tezi 2000 y─▒l─▒nda yap─▒ld─▒. Ne geli┼čtirdik? E─člencelimiydi? Entegrasyonu kolay m─▒yd─▒? Desteklemek? Ak─▒ll─▒ telefonlar─▒n ve lapa lapa mobil ba─člant─▒lar─▒n y├╝kseli┼čini kald─▒racak m─▒?

ME'ye g├Âre, ger├žek hayat a─člar─▒ g├╝venilmez. Zaman a┼č─▒m─▒ istiyor. Ba─člant─▒lar s─▒f─▒rland─▒. A─člar bir kerede saatlerce veya g├╝nlerce azal─▒r. Trenler, gemideki mobil kullan─▒c─▒larla t├╝nellere gidiyor. Herhangi bir talep i├žin (t├╝m bu tart─▒┼čmalarda zaman zaman onayland─▒─č─▒ gibi) talep, talep ├╝zerine suya d├╝┼čebilir ya da cevap geri d├Ânerken suya d├╝┼čebilir. Bu ko┼čullarda, do─črudan kaynaklara kar┼č─▒ PUT, POST ve DELETE istekleri yay─▒nlamak beni her zaman biraz ac─▒mas─▒z ve saf g├Ârd├╝.

HTTP, istek yan─▒t─▒n─▒n g├╝venilir bir ┼čekilde tamamlanmas─▒n─▒ sa─člamak i├žin hi├žbir ┼čey yapmaz ve bu gayet iyi bir ┼čekilde, a─ča duyarl─▒ uygulamalar─▒n i┼čidir. B├Âyle bir uygulama geli┼čtirmek, POST yerine PUT kullanmak i├žin ├žemberlerin aras─▒ndan atlayabilir, daha sonra tekrarlayan istekleri tespit ederseniz, sunucuda belirli bir t├╝r hata vermek i├žin daha fazla ├žembere ge├žebilirsiniz. M├╝┼čteriye geri d├Ând├╝─č├╝n├╝zde, bu hatalar─▒ yorumlamak, yeniden d├╝zenlemek, yeniden de─čerlendirmek ve tekrarlamak i├žin ├žemberlerin i├žinden atlaman─▒z gerekir.

Ya da bunu yapabilirsiniz : g├╝vensiz isteklerinizi ge├žici tek kullan─▒c─▒l─▒ kaynaklar olarak kabul edin (haydi onlara eylemler diyelim). ─░stemciler, kaynak i├žin bo┼č bir POST olan temel bir kaynak ├╝zerinde yeni bir "i┼člem" ister. POST sadece bunun i├žin kullan─▒lacak. Yeni bas─▒lan eylemin URI'sine g├╝venle sahip olduktan sonra m├╝┼čteri , hedef kayna─č─▒ de─čil, eylem URI's─▒na g├╝venli olmayan iste─či g├Ânderir . ─░┼člemi ├ž├Âzmek ve "ger├žek" kayna─č─▒ g├╝ncellemek, API'nizin i┼čidir ve g├╝venilmez a─čdan ayr─▒l─▒r.

Sunucu i┼či yapar, yan─▒t─▒ verir ve kararla┼čt─▒r─▒lan eylem URI'sine kar┼č─▒ saklar . Herhangi bir sorun ├ž─▒karsa, m├╝┼čteri iste─či tekrarlar (do─čal davran─▒┼č!) Ve sunucu zaten g├Ârm├╝┼čse, saklanan yan─▒t─▒ tekrar eder ve ba┼čka bir ┼čey yapmaz .

S├Âzlerle benzerli─či hemen fark edeceksiniz: Herhangi bir ┼čey yapmadan ├Ânce sonu├ž i├žin yer tutucuyu yarat─▒p iade ediyoruz. Ayn─▒ zamanda bir s├Âz gibi, bir eylem bir kez ba┼čar─▒l─▒ veya ba┼čar─▒s─▒z olabilir, ancak sonucu tekrar tekrar elde edilebilir.

Hepsinden ├Ânemlisi, uygulamalara benzersiz ┼čekilde tan─▒mlanm─▒┼č eylemleri kendi ortamlar─▒ndaki benzersizliklerle ili┼čkilendirme ┼čans─▒ veriyoruz. Ve m├╝┼čterilerimizden sorumlu davran─▒┼č talep etmeye ve uygulamaya ba┼člayabiliriz: taleplerinizi istedi─činiz kadar tekrarlay─▒n, ancak mevcut olandan kesin bir sonu├ž elde edene kadar yeni bir eylem olu┼čturmay─▒n.

Gibi, ├žok say─▒da dikenli sorunlar gider. Tekrarlanan ekleme istekleri kopya olu┼čturmaz ve verilere sahip oluncaya kadar ger├žek kayna─č─▒ olu┼čturmaz─▒z. (veritaban─▒ s├╝tunlar─▒ gizlenemez kalabilir). Tekrarlanan g├╝ncelleme istekleri uyumsuz durumlara gelmez ve sonraki de─či┼čikliklerin ├╝zerine yazmaz. M├╝┼čteriler, herhangi bir nedenden ├Ât├╝r├╝ orijinal teyidi alabilir ve sorunsuz bir ┼čekilde i┼čleme koyabilir (m├╝┼čteri ├ž├Âkt├╝, cevap kayboldu vb.).

Ard─▒┼č─▒k silme istekleri, bir 404 hatas─▒na basmadan orijinal onay─▒ g├Ârebilir ve i┼čleyebilir. ─░┼čler beklenenden uzun s├╝rerse, ge├žici olarak yan─▒t verebiliriz ve m├╝┼čterinin kesin sonucu tekrar kontrol edebilece─či bir yerimiz vard─▒r. Bu modelin en g├╝zel k─▒sm─▒, Kung-Fu (Panda) ├Âzelli─čidir. Bir zay─▒fl─▒k, m├╝┼čterilerin yan─▒t─▒ anlamad─▒klar─▒ herhangi bir zamanda bir iste─či tekrar etme e─čilimi g├Âsterir ve bunu bir g├╝├ž haline getiririz :-)

Bana bunun RESTful olmad─▒─č─▒n─▒ s├Âylemeden ├Ânce, l├╝tfen REST ilkelerine sayg─▒ duyulan say─▒s─▒z yolu d├╝┼č├╝n├╝n. ─░stemciler URL olu┼čturmazlar. API, anlambilimde k├╝├ž├╝k bir de─či┼čiklik olsa da bulunabilir durumda kal─▒r. HTTP fiilleri uygun ┼čekilde kullan─▒l─▒r. Bunun uygulanmas─▒ i├žin ├žok b├╝y├╝k bir de─či┼čiklik oldu─čunu d├╝┼č├╝n├╝yorsan─▒z, size bunun deneyim olmad─▒─č─▒n─▒ s├Âyleyebilirim.

Saklamak i├žin b├╝y├╝k miktarda veriye sahip olaca─č─▒n─▒z─▒ d├╝┼č├╝n├╝yorsan─▒z, hacimlerden bahsedelim: tipik bir g├╝ncelleme onay─▒ kilobayt─▒n bir k─▒sm─▒d─▒r. HTTP ┼ču anda size kesin olarak yan─▒t vermeniz i├žin bir veya iki dakika verir. Eylemleri yaln─▒zca bir hafta boyunca saklasan─▒z bile, m├╝┼čterilerin yeti┼čme ┼čans─▒ ├žok fazlad─▒r. ├çok y├╝ksek hacimleriniz varsa, aside uyumlu bir anahtar de─čer deposu veya bir bellek i├ži ├ž├Âz├╝m isteyebilirsiniz.


14







kaynak sunucu bu URI ile kaynak olu┼čturabilir

Yani POST kullan─▒yorsunuz ve muhtemelen kaynak yarat─▒yorsunuz ama gerekli de─čil PUT. ─░kisini de desteklemek zorunda de─čilsin. Benim i├žin POST tamamen yeterli. Bu y├╝zden bir tasar─▒m karar─▒.

Al─▒nt─▒lar─▒n─▒zda belirtildi─či gibi, bir IRI'ye atanm─▒┼č kaynak olmad─▒─č─▒n─▒ olu┼čturmak i├žin PUT'u kullan─▒yorsunuz ve yine de bir kaynak olu┼čturmak istiyorsunuz. ├ľrne─čin, PUT /users/123/password genellikle eski ┼čifreyi yenisiyle de─či┼čtirir, ancak ├Ânceden mevcut de─čilse bir ┼čifre olu┼čturmak i├žin kullanabilirsiniz (├Ârne─čin, yeni kay─▒tl─▒ kullan─▒c─▒lar taraf─▒ndan veya yasakl─▒ kullan─▒c─▒lar─▒ geri y├╝kleyerek).


13







┼×unlarla ini┼č yapaca─č─▒m:

PUT, URI taraf─▒ndan tan─▒mlanan bir kayna─č─▒ ifade eder. Bu durumda, onu g├╝ncelliyorsunuz. ├ť├ž fiilin kaynaklara g├Ânderme yapan k─▒sm─▒d─▒r - silme ve di─čer ikisi olma.

POST, temel olarak ├╝cretsiz bir form mesaj─▒d─▒r ve anlam─▒ 'bant d─▒┼č─▒' olarak tan─▒mlanmaktad─▒r. Mesaj bir dizine bir kaynak eklemek olarak yorumlanabilirse, bu tamam olacakt─▒r, ancak temelde kaynakla ne olaca─č─▒n─▒ bilmek i├žin g├Ânderdi─činiz (g├Ânderdi─činiz) iletiyi anlaman─▒z gerekir.


PUT ve GET ve DELETE bir kayna─ča at─▒fta bulundu─čundan, bunlar ayr─▒ca tan─▒mlay─▒c─▒ niteliktedir.

POST di─čer ├╝├ž i┼člevi yerine getirebilir, ancak daha sonra iste─čin semanti─či, ├Ânbellek ve proxy'ler gibi arac─▒larda kaybolacakt─▒r. Bu, ayn─▒ zamanda, kayna─č─▒n g├╝venli─či sa─člamak i├žin de ge├žerlidir, ├ž├╝nk├╝ bir g├Ânderinin URI'si, uygulad─▒─č─▒ kayna─č─▒ belirtmek zorunda de─čildir (yine de olabilir).

Bir PUT bir yaratma olmak zorunda de─čildir; kaynak ├Ânceden olu┼čturulmam─▒┼čsa servis hata yapabilir, ancak ba┼čka t├╝rl├╝ g├╝ncelleyebilir. Ya da tam tersi - kaynak olu┼čturabilir ancak g├╝ncellemelere izin vermeyebilir. PUT ile ilgili gerekli olan tek ┼čey, belirli bir kayna─ča i┼čaret etmesidir ve y├╝k├╝ bu kayna─č─▒n temsilidir. Ba┼čar─▒l─▒ bir PUT, GET'in ayn─▒ kayna─č─▒ alaca─č─▒ anlam─▒na gelir (giri┼čimi engeller).


D├╝zenleme: Bir ┼čey daha - bir PUT yaratabilir, ancak ├Âyleyse kimli─či do─čal bir kimlik olmal─▒d─▒r - AKA bir e-posta adresi. Bu ┼čekilde iki kez PUT girdi─činizde, ikinci ad─▒m birincinin g├╝ncellemesidir. Bu onu ├Ânemsiz k─▒lar .

Kimlik olu┼čturulursa (├Ârne─čin yeni bir ├žal─▒┼čan kimli─či), ayn─▒ URLÔÇÖye sahip ikinci PUT, idempotent kural─▒n─▒ ihlal eden yeni bir kay─▒t olu┼čturur. Bu durumda fiil POST olur ve mesaj (kaynak de─čil) bu mesajda tan─▒mlanan de─čerleri kullanarak bir kaynak olu┼čturmak olur.


11







Anlambilimin farkl─▒ oldu─ču varsay─▒l─▒r, "GUT" gibi "PUT" nin idrars─▒z oldu─ču varsay─▒l─▒r - yani, ayn─▒ PUT iste─čini birden ├žok kez yapabilirsiniz ve sonu├ž yaln─▒zca bir kez ger├žekle┼čtirmi┼č gibi olur.

En yayg─▒n kullan─▒lan ve en yararl─▒ oldu─čunu d├╝┼č├╝nd├╝─č├╝m s├Âzle┼čmeleri a├ž─▒klayaca─č─▒m:

Bir kayna─č─▒ belirli bir URLÔÇÖye koydu─čunuzda ne oldu─ču, o URLÔÇÖye veya bu sat─▒rlar boyunca bir ┼čeylere kaydedilmesi gerekti─čidir.

Belirli bir URLÔÇÖdeki bir kayna─ča POST g├Ânderdi─činizde, genellikle o URLÔÇÖye ili┼čkin bir bilgi par├žas─▒ g├Ânderirsiniz. Bu, URLÔÇÖdeki kayna─č─▒n zaten var oldu─čunu g├Âsterir.

├ľrne─čin, yeni bir ak─▒┼č olu┼čturmak istedi─činizde, bunu bir URLÔÇÖye koyabilirsiniz. Ancak mevcut bir ak─▒┼ča bir POST mesaj─▒ g├Ândermek istedi─činizde, URL'sine POST g├Ânderirsiniz.

Ak─▒┼č─▒n ├Âzelliklerini de─či┼čtirme gelince, bunu PUT veya POST ile yapabilirsiniz. Temel olarak, i┼člem hatal─▒ oldu─čunda sadece "PUT" kullan─▒n - aksi takdirde POST kullan─▒n.

Ancak, t├╝m modern taray─▒c─▒lar─▒n GET veya POST d─▒┼č─▒ndaki HTTP fiillerini desteklemedi─čini unutmay─▒n.


9







├ço─ču zaman, onlar─▒ bu ┼čekilde kullanacaks─▒n─▒z:

  • Bir kayna─č─▒ koleksiyona POST
  • PUT id: toplama / taraf─▒ndan tan─▒mlanan bir kaynak

├ľrne─čin:

  • POST / ├Â─če
  • PUT / ├╝r├╝nler / 1234

Her iki durumda da, istek g├Âvdesi yarat─▒lacak veya g├╝ncellenecek kayna─č─▒n verilerini i├žerir. POST'un iddias─▒z olmad─▒─č─▒ yol adlar─▒ndan a├ž─▒k├ža anla┼č─▒lmal─▒d─▒r (3 kez ├ža─č─▒r─▒rsan─▒z 3 nesne yaratacakt─▒r), ancak PUT ├Ânemsizdir (3 kez ├ža─č─▒r─▒rsan─▒z sonu├ž ayn─▒d─▒r). PUT, genellikle "yukar─▒ y├╝kseltme" i┼člemi (olu┼čturma veya g├╝ncelleme) i├žin kullan─▒l─▒r, ancak yaln─▒zca de─či┼čtirmek i├žin kullanmak istiyorsan─▒z 404 hatas─▒ her zaman geri alabilirsiniz.

POST'un koleksiyonda yeni bir ├Â─če "yaratt─▒─č─▒n─▒" ve PUT'un belirli bir URL'deki bir ├Â─čeyi "de─či┼čtirdi─čini" unutmay─▒n, ancak k─▒smi de─či┼čiklikler i├žin PUT kullanmak, yani yaln─▒zca mevcut kaynaklar─▒ g├╝ncellemek i├žin kullanmak ├žok yayg─▒n bir uygulamad─▒r. sadece v├╝cutta yer alan alanlar─▒ de─či┼čtirin (di─čer alanlar─▒ yok sayarak). Bu teknik olarak yanl─▒┼čt─▒r, REST-saf olmak istiyorsan─▒z, PUT t├╝m kayna─č─▒ de─či┼čtirmeli ve k─▒smi g├╝ncelleme i├žin PATCH kullanmal─▒s─▒n─▒z. Ki┼čisel olarak, davran─▒┼č─▒n─▒z─▒n t├╝m API u├ž noktalar─▒n─▒z aras─▒nda net ve tutarl─▒ oldu─ču kadar umrumda de─čil.

Unutmay─▒n, REST, API'nizi basit tutmak i├žin bir dizi kural ve k─▒lavuzdur. E─čer sadece "RESTfull" ("RESTfull") kutucu─čunu i┼čaretlemek i├žin karma┼č─▒k bir ├žal─▒┼čma ile kar┼č─▒la┼č─▒rsan─▒z, amac─▒ at─▒yorsunuz;)


8







Bunlar─▒ tan─▒mlaman─▒n agnostik bir yolu olsa da, web sitelerine verilen cevaplardan gelen ├že┼čitli ifadelerle ├želi┼čkili g├Âr├╝nmektedir.

Burada ├žok a├ž─▒k ve do─črudan olal─▒m. Web API ile ├žal─▒┼čan bir .NET geli┼čtiricisiyseniz, ger├žekler (Microsoft API belgelerine g├Âre), http://www.asp.net/web-api/overview/creating-web-apis/creating-a-web -api-that-destekleri-operasyonlar─▒ :

 1. PUT = UPDATE (/api/products/id)
2. MCSD Exams 2014 -  UPDATE = PUT, there are **NO** multiple answers for that question period.
 

Tabi, g├╝ncellemek i├žin "POST" kullanabildi─činizden "emin olabilirsiniz, ancak sizin i├žin verilen ├žer├ževede belirtilen kurallar─▒ takip edin. Benim durumumda bu .NET / Web API, bu y├╝zden PUT UPDATE i├žindir tart─▒┼čma yoktur.

Umar─▒m bu, Amazon ve Sun / Java web sitesi ba─člant─▒lar─▒ ile t├╝m yorumlar─▒ okuyan t├╝m Microsoft geli┼čtiricilere yard─▒mc─▒ olur.


7







─░┼čte basit bir kural:

Bir URLÔÇÖye PUT , bu URLÔÇÖde bulunabilecek kayna─č─▒ g├╝ncellemek veya olu┼čturmak i├žin kullan─▒lmal─▒d─▒r.

Bir URLÔÇÖye POST , ba┼čka bir ("alt") URLÔÇÖde bulunan veya HTTP ├╝zerinden bulunamayan bir kayna─č─▒ g├╝ncellemek veya olu┼čturmak i├žin kullan─▒lmal─▒d─▒r.


7







E─čer veritaban─▒ i┼člemlerini biliyorsan─▒z,

  1. se├žmek
  2. Ekle
  3. G├╝ncelle┼čtirme
  4. Sil
  5. Birle┼čtirme (Zaten mevcutsa g├╝ncelleme, ekleme)

Kulland─▒─č─▒m PUT i┼člemleri ve kullan─▒lmas─▒ gibi birle┼čtirme ve g├╝ncelleme i├žin POST insersiyon i├žin.


6







Uygulamada, POST kaynaklar─▒ olu┼čturmak i├žin iyi ├žal─▒┼č─▒yor. Yeni olu┼čturulan kayna─č─▒n URL'si Konum yan─▒t ba┼čl─▒─č─▒nda d├Ând├╝r├╝lmelidir. PUT bir kayna─č─▒ tamamen g├╝ncellemek i├žin kullan─▒lmal─▒d─▒r. L├╝tfen bunlar─▒n bir RESTful API tasarlarken en iyi uygulamalar─▒n oldu─čunu anlay─▒n. Bu ┼čekilde HTTP belirtimi, kaynak olu┼čturmak / g├╝ncellemek i├žin birka├ž k─▒s─▒tlama ile PUT / POST kullan─▒m─▒n─▒ k─▒s─▒tlamaz. Bir g├Âz at─▒n http://techoctave.com/c7/posts/71-twitter-rest-api-dissected iyi uygulamalar─▒ ├Âzetler.


5