Bir REST API, bir sorgunun var olmayan bir nesneye başvurduğunu belirtmek için 500 Dahili Sunucu Hatası döndürmeli midir?


39

Çok sayıda IoT aygıtının verilerini işleyen bir sunucuda bulunan bir REST API ile çalışıyorum.

Görevim, söz konusu cihazlar hakkında belirli performans bilgilerini toplamak için API'yi kullanarak sunucuyu sorgulamak.

Bir örnekte, kullanılabilir cihazların ve bunlara karşılık gelen tanımlayıcıların bir listesini edindim, daha sonra bu tanımlayıcıları (GUID'ler) kullanarak daha fazla ayrıntı için sunucuyu sorguladım.

Sunucu 500 Internal Server Errorbu kimliklerden birinde bir sorgu için döndürüyor . Uygulamamda bir istisna atıldı ve hatayla ilgili ayrıntıları göremiyorum. Yanıtı Postman'la daha yakından incelersem, sunucunun aşağıdakileri içeren gövdede JSON'u iade ettiğini görebilirim:

errorMessage: "This ID does not exist".

Sunucunun kimliğe başlamasını sağladığı gerçeğini göz ardı edin - bu, geliştirici için ayrı bir sorundur.

Bir REST API'sinin 500 Internal Server Error, bir sorgunun var olmayan bir nesneye başvurduğunu bildirmesi için döndürmesi gerekir mi? Benim düşünceme göre, HTTP cevap kodları kesinlikle API'nin iç mekaniğinden ziyade REST çağrısının durumuna atıfta bulunmalıdır. İlgili 200 OKAPI’ye özel bir hata ve açıklama içeren bir yanıt beklerdim .


Bana göre, REST çağrısının nasıl yapılandırıldığına bağlı olarak beklentide potansiyel bir fark var.

Bu örnekleri göz önünde bulundurun:

  1. http://example.com/restapi/deviceinfo?id=123
  2. http://example.com/restapi/device/123/info

İlk durumda, cihaz kimliği bir GET değişkeni olarak iletilir. Bir 404 veya 500, yolun ( /restapi/deviceinfo) bulunmadığını veya bir sunucu hatasıyla sonuçlandığını gösterir.

İkinci durumda, cihaz kimliği URL'nin bir parçasıdır. Daha anlayışlı olurdum 404 Not Found, ama yine de yolun hangi kısımlarının son noktalara karşı değişken olarak yorumlandığına dayanarak tartışabilirim.


Tanımladığınız bu durum bir başarı mı yoksa bir başarısızlık mı?
Robert Harvey


@RobertHarvey Beklentim, API'nin cihaz hakkında bazı bilgiler döndürmesiydi. Sorgunun kendisi başarılı olmuş olmalı, ancak kaybolan aygıt kimliği istek düzeyinde bir hataya neden olmamalıdır.
JYelton

18
Varolmayan bir kimlik bana 404 gibi geliyor. 500 hataların en yaygın nedeni, barındırma sunucusunun işlemesi için dahili bir istisna oluşturmasına izin veren programcılardır. Bazen bunun gerçekleştiği gerçekten istisnai durumlar ve bazen de tembel programlama. Hangisinin burada olduğunu söylemek zor.
Berin Loritsch

9
500 dahili sunucu "Bizim hatamız, bir şeyi batırdık" anlamına geliyor ve bu durumu bir kullanıcıya geri döndürmeyi asla hedeflememelisiniz . Amacı temel olarak bir hatayı belirtmektir - kullanıcınız belirli bir istek yaptığında 500 aldıklarını söyleyebilir ve sonra da girip düzeltebilirsiniz.
berry120

Yanıtlar:


96

404 yanıtın burada en iyi anlamsal eşleşme olduğunu düşünüyorum, çünkü bulmaya çalıştığınız kaynak (sorgu için kullanılan URI tarafından gösterildiği gibi) bulunamadı. Vücutta bir hata yükünün geri verilmesi makul, ancak zorunlu değil.

RFC 2616'ya göre , 404 durum kodunun tanımı şöyledir:

10.4.5 404 Bulunamadı
Sunucu, Request-URI ile eşleşen hiçbir şey bulamadı. Koşulun geçici mi yoksa kalıcı mı olduğuna dair bir gösterge yok. Sunucu, dahili olarak yapılandırılabilir bazı mekanizmalar yoluyla eski bir kaynağın kalıcı olarak kullanılamadığını ve yönlendirme adresi olmadığını bilirse, 410 (Gitti) durum kodu kullanılmalıdır. Bu durum kodu, sunucu isteğin tam olarak neden reddedildiğini açıklamak istemediğinde veya başka bir cevap verilmediğinde kullanılır.


6
404, yalnızca bulunmayan kimlik alınmakta olan kaynağa karşılık gelirse, yalnızca anlamsal bir eşleşmedir.
Robert Harvey,

55
@ThomasOwens Sonuç döndürmeyen bir sorgu 200 durum ve boş bir sonuç dizisi döndürür. Bir 404, yalnızca gerçekten bulunmayan belirli bir nesne kimliği belirtilirken döndürülür.
Sean Burton,

11
@ThomasOwens: Arayanın görüşüne göre, son nokta değil /questions, öyle /questions/368213. Bu son nokta, senaryoda yok. Bunu şu şekilde düşünün: / foo / bar'da bir GET yaparsanız ve çubuk yoksa, / foo varsa ya da olmasın yanıt neden farklı olsun?
Bryan Oakley

17
Doğru, bu bir sunucu hatası değil bu yüzden 5xx göndermiyoruz. Bu bir istemci hatası var - biz 4xx göndermek böylece müşteri özellikle 404., yoksa bir şeyler istedi
BDSL

7
@ThomasOwens: How do you differentiate between a 404 meaning "the query returned no results" and a 404 meaning "the endpoint does not exist"?- 400 Kötü İstek.
Robert Harvey,

34

Örneklerini kullanacağım.

http://example.com/restapi/deviceinfo?id=123

Bitiş noktası bir json dizisi döndürürse , 200 OKsonuç bulunamamışsa , en iyi seçenek boş bir dizidir.

Uç nokta bir dönmek için tasarlanmıştır Eğer tek bir sonuç , benim seçimim olurdu 404 NOT FOUND, benim için son nokta bu tür doğru sözdizimi, çünkü: http://example.com/restapi/deviceinfo/123. Genellikle istek filtrelemeyi sadece filtreleme için ve uç noktam bir dizi döndürdüğünde kullanırım.

http://example.com/restapi/device/123/info

Bence bu soru zaten burada cevaplandı . POST veya GET, 404 NOT FOUNDkaynak 123bulunamadığı için daha iyi bir seçim gibi görünüyor .

Her iki durumda da, isteğin tamamlanmadığını açıklamanın gerekliliğini göremiyorum. İstek bilgisi ve HTTP kodu zaten nedenini açıklıyor.


2
Varolmayan bir kimliği ve hatalı bir URL'yi nasıl ayırt edersiniz?
Robert Harvey,

2
@luizfzs, bunu da yapabilirsiniz, bu konuda bir sorun göremiyorum. Geliştirdiğim bazı API'lerde, 204'ü yanıt veren herhangi bir organ olmadan başarılı bir PUT veya DELETE'de ( burada açıklandığı şekilde) kullanmayı tercih ederim .
Dherik

10
Neden gerektiğini Eğer o seviyede, varolmayan bir kimliği ve kötü bir URL'ye arasında ayrım? Her iki durumda da, HTTP ile ilgili olarak hala geçerli bir talepte bulunuyorsunuz. Sunucu sadece ... şey ... adreslediğiniz kaynağı bulamıyor . Kötü bir URL, hatalı biçimlendirilmiş bir istek değildir; yanlış olan şey için iyi oluşturulmuş bir istek .
cHao

6
@cHao Çünkü bir geliştirici olarak, öğem olmadığından uygulamamın başarısız olup olmadığını veya yanlışlıkla app.company.cxm / tst / yerine app.company.cxm / test / yerine uygulamamı işaret edip etmediğimi bilmek istiyorum
Patrick M

7
@PatrickM: Bir geliştirici olarak, hata yanıtlarının da bir ileti gövdesi içerebileceğini bilmelisiniz. Eğer gerçekten istiyorsan, açıklayıcı hata bilgisi oraya gider. Anlambilimi bozma çünkü şişman parmaklar hakkında paranoyaksın. HTTP düzeyinde, /itms/1234veya gibi karışık olup olmadığın önemli değil /items/12234.
cHao

27

HTTP 404 Doğru, çünkü sunucu müşterinin istediği kaynağı anlıyor ancak bu kaynağa sahip değil.

Bir "REST API" ile çalışıyor olmanız anahtardır. API, bir işlevi yerine getirmeyen bir Hazırlık Durumu Transferi gerçekleştiriyor gibi davranmalıdır. (Tabii ki, "REST" terimi daha geniş bir anlam kazanmıştır, ancak burada kelimenin tam anlamını iyi etki için kullanabilirsiniz.) Müşteri, URL tarafından açıklanan bir kaynağın durumunu istedi http://example.com/restapi/device/123/info. Bir querystring ( /deviceinfo?id=123) durumu değiştirmez. Sunucu, cihazın 123 durumunu transfer etmek istediğinizi biliyor, ancak bunu bilinen bir kaynak olarak tanımıyor. Dolayısıyla HTTP 404.

Burada tartışılan diğer olası cevapların da özel anlamları vardır:

  • HTTP 200- Senin için devlet aldık; Tepki gövdesinde.
  • HTTP 204- Senin için devlet aldık; boş.
  • HTTP 400- Hangi kaynaktan bahsettiğini söyleyemiyoruz. URL’nizi düzeltin.
  • HTTP 500- Arızalıyız. Senin suçun değil.

Bkz. RFC 2616 Sn. Uygun olduğu şekilde 10.


Bunu kabullenmenle aynı fikirdeyim. Sunucu bir 404 döndürüyorsa, yaptığından daha anlamlı olur (500). Teşekkür ederim.
JYelton

11

Sunucunun bir hatayla karşılaştığını ve isteği tamamlayamadığını belirtmek için genellikle 5xx hatası kullanılır. Sunucu isteği alırsa, başarıyla ayrıştırır ve daha sonra 5xx hatası vermemesi gereken işini yapar.

Bir sorgu sonuç vermezse ne döneceğine dair herhangi bir sözleşme olup olmadığından emin değilim. Ne tarif ettiğinizi (bir mesaj içeren gövdeli bir 200) ve sonuçların bulunamadığını belirten bir 404'ü gördüm. 200 muhtemelen en mantıklı olanıdır - istek başarıyla tamamlandı ve müşterinin isteğiyle veya isteği işleyen sunucuda hiçbir sorun yoktu. Bir kuruluş müşteriye bir mesaj iletebilir.


Her iki örneğinize ( http://example.com/restapi/deviceinfo?id=123ve http://example.com/restapi/device/123/info) aynı şekilde davranırdım - bu 123bir parametredir. Her iki durum da, ID 123'e sahip bir cihaz için cihaz bilgisi almak için bir talep yapılandırmanın farklı yollarıdır.

İlk önce yetkilendirme ve kimlik doğrulamayı düşünürdüm. Kullanıcı uygun izinlere sahip değilse, uygun olarak bir 403 veya 401 döndürürdüm. "Yetkisiz" olarak adlandırılmasına rağmen, benim anladığım kadarıyla 401 kimlik doğrulama ile ilgili ve 403 izinsiz veya izin verilmeyen hakkında. Tüm kimlik doğrulama ve yetkilendirme hataları için sadece 403'e sadık kalmak isteseydiniz, burada çok seçici olmazdım.

Sonra kimliği idare ederim. Örneğinize göre, sayısal bir kimlik gibi görünüyor. Sayısal olmayan bir değer verilirse, 400 değerini döndürürüm. Parametre muhtemelen geçerli bir aygıt tanımlayıcısı olabilirse, işleme devam edeceğim. Başka argümanlar olsaydı, burada da kontrol edilirdi. Yanıt kuruluşundan isteğin neden kötü olduğu konusunda uygun bilgiler içermesini beklerdim.

Tüm parametreler geçerli olsaydı, isteği işleme koymaya başlardım. Sistem veya herhangi bir bağımlılık (bir veritabanı, bir üçüncü taraf hizmeti, başka bir dahili hizmet) mevcut değilse, 5xx kodunu döndürürdüm - 503 belirli olurdu, ancak 500 de kabul edilebilirdi. Her iki durumda da, ek detayları olan bir beden iade ediyorum. Harici bir bağımlılık 408 İstek Zaman Aşımı bildirirse, bunu yiyeceğim ve müşterime 500 iade edeceğim ve müşterinin yalnızca sistemime istek zaman aşımına uğradığında 408 alabilmesine izin vereceğim. Sistem isteği yerine getirebiliyorsa, 200 kişiyi ve uygun bedeni iade ederim.

204 bazı durumlarda yararlı olabilir, ancak bir yanıt gövdesi göndermenizi engeller. Özellikle bir API ayarında, bir günlüğe kaydetme veya raporlama mekanizmasına beslenebilecek bilgileri içeren bir yanıt kuruluşu göndermek çoğu durumda verilecek doğru karar gibi görünmektedir.

Bir 404'ün döndürüleceği tek süre, sunucunun bir /deviceinfobitiş noktası veya bir /device/:id/infobitiş noktası olmamasıydı .

Bulunamayan kaynakla aynı olduğu bulunmayan bir kimliği değerlendirmezdim. Kaynak, belirli bir cihazın cihaz bilgisidir (örneğinizde). Bir 404 döndürmek, kaynağın (cihaz bilgisi) bulunmadığı anlamına gelir. Uygun bir gövdeye sahip bir 200, sistemin gerçekten cihaz bilgisi sağlayabileceği anlamına gelir. Belirtilen kimliğe sahip bir cihaz olabilir veya olmayabilir.


1
@RobertHarvey Evet. Hata yoktu. Sunucunun GUID'yi oluşturup istemciye göndermesi, başka bir işlemin onu kaldırdığı anlamına gelmez. İstek / yanıt başarılı oldu. İstek tarafından temsil edilen komut veya sorgu veri döndürmedi. Bana göre bu bir başarısızlık değil. Bu bir istisna olabilir , ancak 5xx değerinde olduğuna ikna olmadım.
Thomas Owens

2
Sorguladığım bu API'yi tasarlıyor olsaydım, etkisi olan bir şey içeren bir vücutla 200 döndürürdüm device: 123; status: not found;. Sonra sorgunun işe yaradığını ve API'nin bana faydalı bilgiler söylediğini biliyorum .
JYelton

7
@Blrfl Bu, genellikle "bir hata yaptık ve araştıracağız" gibi bir çok web sitesinin 500 sayfasının ifadesiyle desteklenir ("ispatlanmamış" olsa da). Aklımda düzgün çalışan bir sunucu , belki de kozmik ışınlar dışında, asla 500s göndermez.
18'de

6
Http'nin bir 'uç nokta' kavramı yoktur, değişkenle URL'nin geri kalanı arasında anlamlı bir ayrım yoktur ve bu nedenle de hiçbiri dinlenmez. Bir regex üzerinde eşleşen ve binlerce URL’yi bir denetleyici işlevine yönlendiren bir yönlendirme sisteminiz olabilir, ancak bu, API’nın temel bir parçası değil, uygulama detayıdır. Bir alımdaki 200 yanıt, yalnızca istenen kaynak alınırken geçerlidir. Bu durumda, müşteri var olmayan bir kaynağın temsilini ister, bu nedenle 404 doğru cevaptır.
bdsl

8
Düzgün çalışan bir sistem hiçbir zaman 500 yanıt göndermez. Düzgün işlevli bir sunucu 500 gönderebilir, çünkü eğer daha büyük bir sistemin parçasıysa ve bu daha büyük sistemin içinde bir hata algıladıysa, örneğin veritabanı kapalı veya web servisine bağlı diğer saçma sonuçlar döndürüyor.
bdsl

5

500 serisi bir HTTP hatası bir sunucu arızasını belirtir. Bunun dışında 501 Not Implementedve 505 HTTP Version Not Supportedbu hata kodlarını kullanmak, talebi daha sonra tekrar denemenin başarılı olabileceği fikrini taşır (ancak 503 Service Unavailablebunu açıkça ifade etse de ). İdeal olarak, bir sunucu hiçbir zaman bu kodlardan birini üretmemelidir, ancak hatasız yazılım yazma ve sunucuyu sınırsız kaynaklar sağlama zorunluluğu, zaman zaman bunlara ihtiyaç duyacağınız anlamına gelir.

Bir "nesne yok" sonucu için, büyük olasılıkla 404 Not Found(istek adına göre bir nesne olduğunda) ya 200 Successda boş bir sonuç gövdesiyle (niteliklere göre bir nesne ararken) geri dönmelisiniz. 204 No Contentcazip görünüyor, ancak bunu yalnızca bir cevap organının eksikliğinin beklenen sonuç olduğu durumlar için kullanırdım.


1

API'nizin bir müşterisi olarak şu aramalardan birini yaptığımda:

  1. http://example.com/restapi/deviceinfo?id=123
  2. http://example.com/restapi/device/123/info

DeviceInfoİster resmi bir tür isterse sadece belgelenmiş bir "ördek türü" kuralına uyan bir şey olsun, bir nesneyi (veya yine de belirli bir türün bir temsilini) geri almayı bekliyorum . Ben istiyorum 200ben aslında bir tane var demek durumu ve devam edip kullanabilirsiniz.

REST API'ler için, 400 ve 500 durum kodlarını istisnalar gibi bir şey olarak düşünüyorum. Aldığınız istek için ne zaman "normal" bir yanıt veremeyeceğinizi belirtmek için bunları kullanırsınız; böylece müşterinin almayı beklediği bilgileri işlemek yerine istisnai bir şey yapması gerekir.

Bu, bir API tüketicisi olarak, bir yanıt alan veya bir istisna atan bir tür işaretlenmiş geri arama işlevini kullanabileceğim anlamına gelir. Bu harika; benim normal mantığım düz bir kod olabilir ve hata kodumu yerel kodda yaptığım şekilde düzenleyebilirim. Beklenmeyen 404'ler, daha sonra { errorMessage: "Device 123 not found" }bir DeviceInfonesneymişim gibi işlem yaptığım zaman, "eksik öznitelik" hataları olarak değil, hiçbir şey yapmak zorunda kalmadan istisnalar "hiçbir kaynak bulunamadı" olarak tezahür edecek .

Son nokta olduğunu sen neden olursa http://example.com/restapi/deviceinfo edilir bulundu ve teklif sadece id=123o zaman ya a geri dönebilirler C fonksiyonları olarak arayüz problemlerinin aynısını ya oluştururken, değildir ve bu nedenle vücutta bir hata mesajı ile 200 dönmek olduğunu doğru sonucu veya bir hata kodunu veya rasgele döndürerek sorunları belirten yöntemleri doğrulayınnull. Arayüzünüzün bir kullanıcısı olarak, "ayrı" bir kanalda belirtilen hataların düzenli iadelerden gösterilmesi daha iyidir. Bu, HTTP 200, 404 ve 500 yanıtlarının düşük seviye bakış açısından aynı kanal olmasına rağmen, bu da geçerlidir. Standartlaştırılmış ve ayırt edilmeleri kolaydır, böylece REST istemci çerçevem ​​bu durumları kendi dilimdeki uygun yapılara dönüştürmek için kolayca açabilir; JSON katmanıyla aynı şeyi yapmak için (her zaman 200 deyin ve bana bir DeviceInfoveya bir hata mesajı verin) kullandığınız JSON şemaları hakkında biraz bilgi katmam gerekiyor.

Bu yüzden sadece 200, beklenen türden geçerli bir değer döndürebiliyorsanız kullanın (bu nedenle http://example.com/restapi/search-devices?colour=bluemavi cihaz yoksa boş bir dizi ile 200'ü döndürebilirsiniz; boş bir dizi geçerli bir dizidir ve talebe makul bir cevap "I tüm mavi cihazların detaylarını istiyorum "). Yapamazsanız, en uygun 200 olmayan durum kodunu kullanın. Her ne kadar "cihaz 123 mevcut değil", "cihaz 123'ün ayrıntılarını bana ver" e verilen doğru cevap olsa da ve sunucu için bir hata olmasa da , müşterinin geri alacağı DeviceInfove geri dönmesi beklentisi için bir istisnadır. normal olarak iletilmemeli "işte sorduğun şey bu" cevabı.


Ne yazık ki ben de bu API'nin müşterisiyim ve değiştiremiyorum. Bu, nasıl çalışması gerektiği konusunda harika bir özet .
JYelton

0

Bulunamayan 404'ten ayrılmak için 422 İşlenemeyen Varlık hatasını kullanabilirsiniz . 422, sunucunun isteği anladığı ancak uygun bir cevap veremediği anlamına gelir. Bu kodu benzer durumlarda kullanıyorum.


4
Bu makalede 422 kullanımı daha ayrıntılı olarak açıklanmaktadır. Bu hata kodunun burada gerçekten geçerli olduğunu sanmıyorum.
Robert Harvey,

Teşekkürler, çok yararlı! Bu konuyu derinleştirmek zorunda kalacağım!
FiNeX

0

Hata 500 normal olarak isteğin bir sunucu tarafı programını düştüğünü gösterir; İşletme ortamlarında bu hatalar yüze yumurta olarak değerlendirilir ve önlenir.

Hata 4xx, programlayıcıya API uç noktasının (kaynak) bulunmadığını bildirmelidir. Sonuç olarak, uygun son noktaya ulaşıldığında, bu noktadan itibaren ele alınan herhangi bir hata, API'nin, 200 yanıtlı bir hata mesajı ile birlikte dikkatlice ele alınması gereken programcı sorumluluğudur.


1
Diyorsunuz ki "500 kullanmayın, çünkü sunucuyu kilitlemiyorsunuz?"
Robert Harvey,

0

W3, 404'ün başka bir cevap verilmediğinde kullanıldığını not etse de , bu bir 204 (İçerik Yok) yanıtı için iyi olmaz mıydı? İstek bir işleme açısından geçerliydi ve sunucu isteği işleme koydu ve bir sonucu oldu. Bu, 2xx yanıtlarına dayanan bir başarıdır. Bu özel istek için hiçbir içerik bulunmadığından, 204 kullanıcıya sorgularında yanlış bir şey olmadığını ancak orada hiçbir şey olmadığını söyler.

Ayrıca, 409 (Çatışma) uygun bir cevap olduğu için zayıf bir dava açabilirsiniz. 409 en sık bir POST için kullanılsa da

İ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. Yanıt organı, kullanıcının çatışmanın kaynağını tanıması için yeterli bilgiyi içermelidir. İ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.

Muhtemelen, istenen kimliğin bulunmaması buradaki ihtilaftır ve sistemde böyle bir kimliğin bulunmadığı mesajına geri dönerek kullanıcının bu çakışmayı tanıması ve çözmesi için yeterli bilgi olduğu söylenebilir.


3
Hayır, bir alma isteğine ilişkin 204 yanıt yalnızca istenen kaynak bulunduğunda ve gösterimi tam olarak sıfır karakter uzunluğunda olduğunda anlamlı olur.
bdsl

0

Diğer cevaplar bunu örtbas ediyor, ancak sadece 500 serisi bir hatanın "batırdım" anlamına geldiğini belirtmek istedim. Bu durumda, "Ben" API anlamına gelir, bu yüzden işlenmemiş bir sunucu hatası veya benzeri. 400 serisi bir hata "sizi mahvetti" anlamına gelir - API'nin arayanı yanlış bir şey gönderdi.


-4

Diğer kullanıcılar, kitaba gitmek istemeniz durumunda ne yapmaları gerektiğine dair geçerli cevaplar sağlamışlardır.

Bununla birlikte, RESTfullık hakkında çok fazla okumanızı ve bu konuda kesinlikle dolandırıcı olmanızı öneririm.

REST kaprisli bir protokoldür, çünkü kitabı kullanırken kitaptan geçmek istiyorsanız, hem müşteriyi hem de sunucuyu REST yoluyla iletişim kurduklarına dair özel bir bilgiye sahip olmak için inşa etmeye zorlar, bu nedenle özünde özel iletişim protokolü kullanılan soyutlanamaz.

Farklı bir yaklaşım var: tamamen RESTfulness'tan uzak durun ve onu sadece bir iletişim protokolü olarak kullanın ve başka bir şey kullanmayın. Bu, geri verilmesi gereken yanıtların yalnızca "HTTP 200 OK" ve "HTTP 500 Dahili Sunucu Hatası" olduğu anlamına gelir; çünkü iletişim protokolü söz konusu olduğunda, iletişim kurma girişiminin yalnızca iki sonucu olabilir: talep başarıyla sonuçlandı Sunucuya teslim edilir veya gönderilmez.

Teslimattan sonra olan, iletişim protokolünün işi değil. Bu nedenle, sunucu isteği başarıyla kabul edip işleme koymaya başladığında, birçok hata ortaya çıkabilir, ancak bunların tümü, iletişim protokolünün hakkında bir şey bilmesi gereken işlerden hiçbiri olmayan uygulamaya özgü hatalardır. İletişim protokolünün bildiği kadarıyla mükemmel bir şekilde görünen bir yanıtın yükü içinde iletilmelidirler.

Bu nedenle, sonuçta, "HTTP 200 OK" ve "geri dönüş yükü içerisinde (HTTP parlance" yanıt içeriği gövdesi ")" ID bulunamadı "ya da her neyse, uygulamaya özel bir hata kodunun dönmesini öneririm.


Olumsuz oylara bakılırsa, sanırım bazı insanların duygularını incitmiş olmalıyım. Ya da belki vücutlarının başka bir kısmı. C -: =
Mike Nakis

Bunu gerçekten okumalılar
Mike

1
Burada acı yok. Sen sadece yanılıyorsun. Bağlandığınız makale bile durum kodlarını kullanmaktan açıkça bahsetmiyor, o kadar yanlış bir şekilde yanlışlar ve başarı aynı görünüyor. “Zevkten bahsetmişken, API tasarımının kesinlikle istemci ve sunucu yazılımı üzerindeki pratik uygulamalar ile ilgili olmadığını hatırlamak önemlidir. Bir API için izleyici, onu tüketecek olan geliştiricidir. şaşkınlık, ”geliştiriciler, aşina oldukları diğer API'lerle aynı kuralları izlerse bir API'yi öğrenme ve anlama konusunda daha kolay bir zamana sahip olacaklardır.”
cHao

@Hao yani, "Dropbox şu anda yaklaşık 10 farklı durum kodu kullanıyor (başarı için 8 hata ve 2), ancak API’nın gelecekteki bir sürümünde bu sayıyı düşürmeyi planlıyoruz" diyen bölüm için bir anlam ifade etmedi. sen.
Mike Nakis

Ne elde edersen demek istemedim. Ne yaptıklarını biliyorlarsa, o zaman en uç noktada, bir başarıya ve dört hata koduna (400, 401, 404 ve 500) indirgeneceklerdi, çünkü açıkça sözleşmeleri önemsiyorlardı.
cHao
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.