API xətası REST yaxşı bir təcrübə qaytarır

REST API'sində səhvləri qaytarmaq üçün ən yaxşı təcrübələr haqqında təlimat axtarıram. Yeni bir API üzərində işləyirəm, buna görə də hər hansı bir istiqamətdə indi bilərəm. Hal-hazırda məzmunum XML-dir, amma gələcəkdə JSON-ə dəstək verməyi planlaşdırıram.

İndi bəzi səhvlər əlavə edirəm, məsələn, müştəri yeni bir resurs əlavə etməyə çalışır, ancaq onun saxlama kvotasını aşdı. Mən artıq HTTP status kodları ilə bəzi səhvləri idarə edirəm (doğrulama üçün 401, avtorizasiya üçün 403 və sadə URI tələbləri üçün 404). Müqəddəs HTTP səhv kodlarına baxdım, ancaq 400-417 aralığından heç biri xüsusi tətbiq səhvlərini bildirməsinə icazə vermədi. Ona görə də ilk dəfə mənim ərizə səhvimi 200 OK və müəyyən bir XML yüklə (yəni bizi daha çox ödəyəsiniz və sizə lazım olan saxlama alacaqsınız) geri qaytarmaq istəmişəm, amma bu barədə düşünməyə dayandım və sabun (/ shrugged qorxunc). Bununla yanaşı, səhv cavabların ayrı-ayrı hallara bölündüyümə görə, bəziləri də http statusu kodu ilə idarə olunur, digərləri isə məzmunu idarə edir.

Beləliklə, sənaye təklifləri nədir? Yaxşı təcrübə (səbəbini izah edin!) Və POW müştərisindən də REST API'sində hansı səhvlərin həlli müştəri kodunun həyatını asanlaşdırır?

492
03 июня '09 в 6:39 2009-06-03 06:39 Remus Rusanu, 03/09/09 tarixində 6:39 'da 2009-06-03 06:39 ' də soruşdu
@ 12 cavab

Beləliklə, ilk növbədə mənim ərizə səhvimi 200 OK və müəyyən bir XML yüklə (yəni bizə daha çox pul verin və sizə lazım olan saxlama alacaqsınız!) Geri qaytarmaq istərdim, amma bu barədə düşünməyə dayandım və sabun (/ sanki) kimi görünürdü qorxuya düşmək).

İddia ilə yanlış bir şey yoxdursa, 200-i qayıdacağam. RFC2616 200-dən, sorğu uğurlu oldu.

Müştəri üçün saxlama kvotası (hər hansı bir səbəbdən) aşılsaydı, mən 403 (Yasaqlığa) dönərdim:

Server sorğunu anladı, ancaq bunu icra etməkdən imtina etdi. Yetkilendirme kömək etməyəcək və tələb təkrarlanmamalıdır. Tələbi metodu HEAD olmadıqda və server sorğunun niyə yerinə yetirilmədiyini bildirmək istəsə, bu müəssisənin uğursuzluğunun səbəbini təsvir etməlidir. Əgər server bu məlumatı müştəriyə vermək istəməsə, yerinə 404 status kodu (tapılmadı) istifadə edilə bilər.

Bu müştəriyə tələbin yaxşı olduğunu göstərir, amma işə yaramadı (200-ə yaxın bir şey yoxdur). Bu da cavab bünyəsində problemi (və həllini) izah etməyə imkan verir.

Başqa hansı xüsusi səhvlər nəzərə alındı?

183
03 июня '09 в 7:08 2009-06-03 07:08 Cavab Zəngin Apodaca tərəfindən 03 iyun 'da 07:08 ' də verildi. 2009-06-03 07:08

API üçün doğru HTTP səhv kodunu seçmək üçün mükəmməl bir qaynaq: http://racksburg.com/choosing-an-http-status-code/

Məqalədən cəlb:

Nə başlamaq lazımdır:

2019

Əsas seçim HTTP status kodunu REST API-nın bir hissəsi kimi işləməyiniz istəməyinizdir.

Hər iki üsul yaxşı işləyir. Həqiqətən, REST fikirlərindən biri, HTTP statusu kodunu API-nın bir hissəsi kimi istifadə etməyinizdir (200 və ya 201-ə uğurlu əməliyyat üçün və 4xx və ya 5xx-ə müxtəlif səhvlərdən asılı olaraq). Ancaq REST polisi yoxdur. İstədiyiniz şeyi edə bilərsiniz. Mən "RESTful" adlanan daha çox ateşli REST API görmüşəm.

Bu nöqtədə (Avqust 2015) HTTP status kodunu API'nızın bir hissəsi kimi istifadə etdiyiniz məsləhətini verirəm. İndi keçmişdə olduğundan daha çox çərçivələri istifadə edərkən qaytarma kodunu görmək daha asandır. Xüsusilə, keçmişdə olduğundan 200-dən artıq qaytarılmaların və 200-dən artıq cavabların cismini görmək daha asandır.

HTTP statusu kodu apiinizin bir hissəsidir

HTTP statusu kodu api-nin bir hissəsidir

Burada bənzər bir fikir olan bir post var: http://yuiblog.com/blog/2008/10/15/datatable-260-part-one/

Əsas problemlər:

  • Lazım gələrsə api semantikasını dəyişdirə bilmək üçün versiya nömrələrini daxil etdiyinizə əmin olun.

  • Sənəd ...

75
03 июня '09 в 7:13 2009-06-03 07:13 Cavab Larry K tərəfindən 03/09/09 tarixində 7:13, 2009-06-03 07:13

HTTP / 1.1 RFC protokollarında müəyyən edilənlərdən daha çox statusu kodları olduğunu unutmayın, IANA qeydiyyatı http://www.iana.org/assignments/http-status-codes saytında yerləşir. Sözügedən hal üçün, status kodunu 507 doğru səsləndirir.

39
03 июня '09 в 8:46 2009-06-03 08:46 Cavab Julian Reschke tərəfindən 03.06.09 08:46 da verildi. 2009-06-03 08:46

Başqalarının qeyd etdiyinə görə, səhv kodunda cavab obyektinin olması olduqca məqbuldur.

Xatırladaq ki, 5xx səhvləri server əsaslıdır, çünki müştəri sorğu göndərmək üçün onun istəməsində bir şey dəyişə bilməz. Müştəri kotası aşılırsa, bu, həqiqətən, bir server səhv deyil, belə ki, 5xx qarşısını almaq lazımdır.

22
04 июня '09 в 16:54 2009-06-04 16:54 Cavab SerialSeb 04 iyun '09 saat 16:54 'da verilir 2009-06-04 16:54

Mən bilirəm ki, partiya üçün çox gec, lakin indi, 2013-cü ildə biz ümumi yayılmış (RESTful) modada səhvlərin işlənməsini əhatə edən bir neçə növ media var. Application / problem + json ( https: / / https: / / vnd.error + json ( https://github.com/blongden/vnd.error ) və "HTTP-API üçün problem ətraflı", "Vnd.error" /tools.ietf.org/html/draft-nottingham-http-problem-05 ).

17
18 дек. Jørn Wildt tərəfindən verilmiş cavab 18 dekabr 2013-12-18 12:49 '13 at 12:49 2013-12-18 12:49

İki növ səhv var. Ərizə səhvləri və HTTP səhvləri. HTTP hataları yalnız AJAX işleyicinizin hər şeyin yaxşı getdiyini və başqa bir şey üçün istifadə edilməməsi lazım olduğunu bilmək üçündir.

5xx server səhvi

 500 Internal Server Error 501 Not Implemented 502 Bad Gateway 503 Service Unavailable 504 Gateway Timeout 505 HTTP Version Not Supported 506 Variant Also Negotiates (RFC 2295 ) 507 Insufficient Storage (WebDAV) (RFC 4918 ) 509 Bandwidth Limit Exceeded (Apache bw/limited extension) 510 Not Extended (RFC 2774 ) 

2xx Müvəffəqiyyəti

 200 OK 201 Created 202 Accepted 203 Non-Authoritative Information (since HTTP/1.1) 204 No Content 205 Reset Content 206 Partial Content 207 Multi-Status (WebDAV) 

Ancaq tətbiqi səhvlərinizi necə inkişaf etdirdiyiniz həqiqətən də sizə aiddir. Məsələn, yığın daşması response , datamessage parametrləri ilə bir obyekt göndərir. Əməliyyatın müvəffəqiyyətli olub-olmamasını (adətən yazma əməliyyatları üçün) göstərmək üçün true və ya false olduğunu düşünürəm. Məlumatlar bir payload (adətən oxumaq əməliyyatları üçün) ehtiva edir və mesaj əlavə metadata və ya faydalı məlumatları ehtiva edir (məsələn, response false olduğu zaman səhv mesajları).

15
03 июня '09 в 12:21 2009-06-03 12:21 Cavab aleemb 03 iyun 2009 -da saat 12:21 da verilir. 2009-06-03 12:21

Razıyam. REST-in əsas fikri veb infrastrukturundan istifadə etməkdir. HTTP status kodları tərəflərin HTTP yükünü artırmadan bir-biri ilə ünsiyyət qurmasına imkan verən bir mesajlaşma mühiti. Onlar artıq reaksiya vəziyyətini çatdırmaq üçün universal kodlar qurmuşlar və buna görə də həqiqətən RESTful olmaq üçün tətbiqlər bu strukturdan cavab vəziyyətini ötürmək üçün istifadə etməlidirlər.

HTTP 200 zərfində səhv cavab göndərmək yanlışdır və müştəri (api istehlakçıya) mesajı təhlil edir, ən çox qeyri-standart və ya xüsusi bir şəkildə. Bu da səmərəsizdir - müştərilərinizin "real" reaksiya vəziyyətini anlamaq üçün hər dəfə HTTP yükünü təhlil etməyə məcbur edəcəksiniz. Bu işlənməni artırır, gecikdirir və müştəri üçün səhv etmək üçün bir mühit yaradır.

8
21 нояб. Cavab Kingz 21 noyabrda verilir. 2013-11-21 20:38 '13 at 8:38 pm 2013-11-21 20:38

Apiinizi mövcud ən yaxşı təcrübələrə uyğunlaşdırmaq yol ola bilər. Məsələn, Twitter Twitter-də səhv kodlarını necə işlədir? Https://dev.twitter.com/docs/error-codes-responses

6
23 окт. Gökül 23 oktyabrda cavab verdi 2013-10-23 08:39 '13 at 8:39 2013-10-23 08:39

Xahiş edirik protokol semantikasına əməl edin. Müvəffəqiyyətli cavablar üçün 2xx istifadə edin və səhv cavablar üçün 4xx, 5xx - iş istisnalarınız və ya başqalarınız olsun. Protokolda istifadə üçün nəzərdə tutulan hər hansı bir cavab üçün 2xx istifadə edilərsə, ilk növbədə digər status kodları olmayacaqdır.

3
14 апр. cavil008 14 apr verilir . 2016-04-14 09:42 '16 at 9:42 2016-04-14 09:42

5xx səhvlərini, eləcə də tətbiq səhvlərini unutma.

Bu vəziyyətdə 409 (münaqişə) nədir? Bu, istifadəçinin qeyd olunan resursları silməklə problemi həll edə biləcəyini göstərir.

Əks təqdirdə, işləyə bilər və 507 (olduqca standart deyil). 200'ü səhvlər üçün istifadə etməsəniz 200 istifadə etməyəcəyəm.

3
03 июня '09 в 18:38 2009-06-03 18:38 Cavab Kathy Van Stone tərəfindən 03 iyun 09: 00-da saat 18: 38-da verilir. 2009-06-03 18:38

Müştəri kvota aşılırsa, bu bir server səhvidir, bu halda 5xx qarşısını almaq lazımdır.

-1
06 мая '10 в 3:02 2010-05-06 03:02 cavab 06 may 2010-cu il tarixində saat 03: 02-da verilmişdir

tags ilə bağlı digər suallar və ya bir sual