Standart JSON API yanıt biçimi?


698

Bir API'dan JSON yanıtlarını yapılandırmak için standartlar veya en iyi uygulamalar var mı? Açıkçası, her uygulamanın verileri farklıdır, bu yüzden çok fazla ilgilenmiyorum, daha çok "yanıt levhası", eğer olacak. Ne demek istediğime bir örnek:

Başarılı istek:

{
  "success": true,
  "payload": {
    /* Application-specific data would go here. */
  }
}

Başarısız istek:

{
  "success": false,
  "payload": {
    /* Application-specific data would go here. */
  },
  "error": {
    "code": 123,
    "message": "An error occurred!"
  }
}

16
İnsanlar muhtemelen SOAP'tan ders almışlar ve bir daha inşa etmeyecekler ...
Denys Séguret

18
@dystroy: Yorumunuzu açıklamak ister misiniz?
FtDRbwLXw6

5
Son zamanlarda bir JSON API tasarlamak zorunda kaldım ve bir yanıt biçimini tanımlayan herhangi bir standart olup olmadığını merak ettiğim için bu soru ile gerçekten ilgilendim. Seninki aslında oldukça güzel görünüyor ve bir standart bulamazsan kullanmaya değer görünüyor. Verilen cevapların aslında soruyu ele almaması utanç vericidir.
Alex

13
@Alex maalesef, nereye giderseniz gidin, standart yok . Sadece JSON'un kendisinde değil, RESTful uygulamaları veya başka bir şey için nasıl kullanılacağı açısından. Herkes bunu farklı yapıyor. En iyi uygulamaları (HTTP yanıtları, anlamlı paket yapısı, verilerinizi sisteminiz tarafından tüketilmek üzere yapılandırmaya yönelik bir göz) takip edebilirsiniz, ancak büyük bir distribütör olan herkes diğerlerinden farklı en az bir şey yapıyor. .. Bir standart yok ve muhtemelen bir tane olmayacak, bu yüzden sağlam bir şey inşa edin ve size uyacak şekilde inşa edin.
Norguard

Yanıtlar:


642

Evet, ortaya çıkan birkaç standart var (standart tanımında bazı özgürlükler olsa da):

  1. JSON API - JSON API, yalnızca yanıtları değil kaynakları da oluşturmayı ve güncellemeyi kapsar.
  2. JSend - Basit ve muhtemelen zaten yaptığınız şey.
  3. OData JSON Protokolü - Çok karmaşık.
  4. HAL - OData gibi ama HATEOAS gibi olmayı hedefliyor .

JSON API açıklama biçimleri de vardır:


19
Teşekkür ederim. Özellikle JSend tam olarak aradığım şeydi. Yaptığım şeye benziyor, ancak yöntemimin yapmadığı bazı faydaları var. @Trungly adında, JSend de kendi cevabına çok yakın.
FtDRbwLXw6

8
Özellikle hata yanıtları için HTTP API RFC taslağı için Sorun Ayrıntılarını da seviyorum .
Pieter Ennes

1
Belki de açıklama biçimi listesine code.google.com/p/json-service ' i eklemek istersiniz ?
emilesilvis

1
"Rails için önerilen bir standart" etiketi biraz abartı olduğunu düşünüyorum - bu sadece bir programcının çözümü. Ne "önerilen standart" yapan emin değilim (özellikle gem popülerlik bakarsanız - birçok kişi bunu hiç kullanıyor gibi görünmüyor)? Şahsen çoğu Rails programcısının durum için HTTP üstbilgileri yerine yanıt gövdesi kullanması nedeniyle bu çözümü
önereceğini düşünmüyorum

2
Google JSON Stil Kılavuzu da iyi bir referanstır
MRodrigues

196

Google JSON kılavuzu

Başarılı yanıt dönüşü data

{
  "data": {
    "id": 1001,
    "name": "Wing"
  }
}

Hata yanıtı dönüşü error

{
  "error": {
    "code": 404,
    "message": "ID not found"
  }
}

ve istemciniz JS if ("error" in response) {}ise, bir hata olup olmadığını kontrol etmek için kullanabilirsiniz .


13
Her şeyden önce, Google JSON kılavuzu tek tırnak yerine çift tırnak kullanılmasını önerir.
rpozarickij

1
Bu iki şekilde önemli değil, PlayJson gibi bir Sunucu Tarafı JSON API işlemek eğer emin değilim. @Sadece bağlantılarınız koptu
Rhys Bradbury

3
Hataların bir listesini (doğrulama sorunları gibi) sağlaması gereken hatalar ne olacak?
Xeoncross

1
@Xeoncross kelimedeki bağlantıyı tıklayın error, Google'ın sayfası buna bir örnek veriyor
MI Wright

@Xeoncross Hata.errors [] kullanarak bir hata listesi döndürebilirsiniz: "Hata ile ilgili ek bilgi için kapsayıcı. Hizmet birden çok hata döndürürse, hata dizisindeki her öğe farklı bir hatayı temsil eder." Belki de üst düzey hata "İstek başarısız giriş doğrulaması" ndan bahseder ve hatalar [] dizisi, meydana gelen her bir özel doğrulama hatası için bir girişe sahip olur.
James Daily

130

Bir defacto standardı gerçekten ortaya çıkmadı (ve asla olmayabilir). Ama ne olursa olsun, işte benim almam:

Başarılı istek:

{
  "status": "success",
  "data": {
    /* Application-specific data would go here. */
  },
  "message": null /* Or optional success message */
}

Başarısız istek:

{
  "status": "error",
  "data": null, /* or optional error payload */
  "message": "Error xyz has occurred"
}

Avantajı: Hem başarı hem de hata durumlarında aynı üst düzey öğeler

Dezavantaj: Hata kodu yok, ancak isterseniz durumu (başarılı veya başarısız) bir kod olarak değiştirebilirsiniz, -ya da- "kod" adlı başka bir üst düzey öğe ekleyebilirsiniz.


3
json ayrıştırma için POJO kullanıyorsanız evet bu doğru yoludur! POJO'ları kullanırken statik, dinamik olmayan json formatına ihtiyacımız var!
LOG_TAG

Basit ve noktaya. Bence jsend'den daha iyi çünkü jsend hatayı hatadan ayırır.
Josue Alexander Ibarra

1
Ben de ancak adlı bir alanla Bu modeli kullanan messagesbir olan mesajların dizisi yerine tek dize.
StockBreak

4
Cevap, basit ve çok kullanışlı olan iyi belgelenmiş JSend'in neredeyse bir kopyasıdır . failTipik doğrulama problemleri için üçüncü durum sunarken error, sadece db hataları gibi ölümcüllerle kullanılırlar.
s3m3n

başarı için: eğer 200başlıklarda varsa neden bir statusalana ihtiyacınız var ? veri nesnesini düz döndürmeniz yeterlidir. Bunun TypeScript gibi yazılan FE dillerinde ek ağrıya neden olabileceğini biliyorsunuz.
Deniss M.

84

Sorunuzun REST web hizmetleri tasarımı ve daha doğrusu başarı / hata ile ilgili olduğunu varsayarsak.

3 farklı tasarım türü olduğunu düşünüyorum.

  1. Kullan yalnızca HTTP Durum kodu bir hata olmadığını belirtmek ve standart olanlar (genellikle yeterli olacaktır) kendinizi sınırlamak için denemek için.

    • Artıları: API'nizden bağımsız bir standarttır.
    • Eksileri: Gerçekten ne olduğu hakkında daha az bilgi.
  2. HTTP Status + json gövdesini kullanın (bir hata olsa bile). Hatalar için tek tip bir yapı tanımlayın (örn: kod, mesaj, neden, tür, vb.) Ve hatalar için kullanın, eğer bir başarı ise, beklenen json yanıtını döndürün.

    • Artıları: Mevcut HTTP durum kodlarını kullandığınızda ve hatayı açıklayan bir json döndürdüğünüzde hala standarttır (ne olduğu hakkında daha fazla bilgi sağlarsınız).
    • Eksileri: Çıkış json, bir hata veya başarı olup olmadığına bağlı olarak değişir.
  3. Http durumunu unut (ör: her zaman durum 200) , her zaman json kullanın ve yanıtın köküne bir boolean responseValid ve bir hata ise doldurulacak bir hata nesnesi (kod, mesaj vb.) Ekleyin, aksi takdirde diğer alanlar (başarı) doldurulur.

    • Artıları: İstemci yalnızca bir json dizesi olan yanıt gövdesi ile ilgilenir ve durumu (?) Yoksayar.

    • Eksileri: Daha az standart.

Seçmek size kalmış :)

API'ye bağlı olarak 2 veya 3 seçerim (json rest apis için 2'yi tercih ederim). REST Api tasarımında deneyimlediğim başka bir şey, her kaynak (url) için belgelerin önemi: parametreler, gövde, yanıt, başlıklar vb + örnekler.

Jersey (jax-rs uygulaması) + genson (java / json databinding library) kullanmanızı da tavsiye ederim . Sadece sınıf yolunda genson + jersey düşürmeniz gerekir ve json otomatik olarak desteklenir.

DÜZENLE:

  • Çözüm 2'nin uygulanması en zor olanıdır, ancak avantaj, sadece iş hatalarını değil, istisnaları da iyi bir şekilde ele alabilmenizdir, ilk çaba daha önemlidir, ancak uzun vadede kazanırsınız.

  • Çözüm 3, hem sunucu tarafında hem de istemcide uygulanması kolaydır, ancak returnValid + hatasını da içeren bir yanıt nesnesine döndürmek istediğiniz nesneleri kapsüllemek zorunda kalacağınız kadar hoş değildir.


2
"Hatalar için tek tip bir yapı tanımlamalıyım" ve diğer benzer önerileri söylemeliyim, ama tam da bunu soruyorum. Sanırım cevap "hayır, bu yapıya ilişkin standart veya en iyi uygulama yok" şeklinde ortaya çıkıyor.
FtDRbwLXw6

7
Kayıt için: HTTP durum kodu bir başlık değildir.
pepkin88

3
"yanıt json değil html olacaktır." yanlış! html'nin hata işlemeyle ilgisi yoktur. yanıt, desteklediğiniz içerik türü olabilir.
oligofren

2
@ ア response ッ ク line HTTP durum kodu, HTTP yanıtının üstbilgisinin durum satırında bulunan 3 basamaklı bir koddur. Bu satırı izleyerek başlık alanları, konuşma dilinde başlık da denir.
pepkin88

1
@ ア レ ッ ク HTTP
HTTP'deki


19

İnstagram kullanılan instagram biçimi

{
    "meta": {
         "error_type": "OAuthException",
         "code": 400,
         "error_message": "..."
    }
    "data": {
         ...
    },
    "pagination": {
         "next_url": "...",
         "next_max_id": "13872296"
    }
}

19

Bunun bir standart olduğunu iddia etmek kadar kibirli olmayacağım, bu yüzden "tercih ederim" formunu kullanacağım.

Ben kısa yanıt tercih (/ makale listesi talep ederken ben bir JSON makale dizisi istiyorum).

Tasarımlarımda durum raporu için HTTP kullanıyorum, 200 tanesi sadece yükü döndürüyor.

400 , istekte neyin yanlış olduğuna dair bir mesaj döndürür:

{"message" : "Missing parameter: 'param'"}

Dönüş 404Model / denetleyici / URI yoksa

Yanımda işlemede hata varsa, 501'i bir mesajla döndürürüm :

{"message" : "Could not connect to data store."}

Gördüğüm kadarıyla, birkaç REST-ish çerçevesi bu çizgiler boyunca olma eğilimindedir.

Gerekçe :

JSON'un bir yük biçimi olması gerekiyordu , bu bir oturum protokolü değil. Ayrıntılı session-ish yükleri fikri, XML / SOAP dünyasından ve bu şişirilmiş tasarımları oluşturan çeşitli yanlış yönlendirilmiş seçeneklerden gelir. Tüm bunların büyük bir baş ağrısı olduğunu fark ettikten sonra, REST / JSON'un tüm amacı onu ÖPMEK ve HTTP'ye bağlı kalmaktı. Ben ya JSend uzaktan standart bir şey olduğunu düşünmüyorum ve özellikle aralarında daha ayrıntılı değil. XHR HTTP yanıtına tepki verir, AJAX'ınız için jQuery kullanırsanız (çoğu gibi) hataları yakalamak için try/ catchve done()/ fail()geri aramaları kullanabilirsiniz. JSON'daki durum raporlarının ne kadar kapsülleyici olduğunu bundan daha yararlı göremiyorum.


2
Msgstr "JSON bir yük biçimidir ...". Hayır, JSON bir veri serileştirme biçimidir. Oturum protokolleri veya sadece basit yükler de dahil olmak üzere istediğiniz her şeyi iletmek için kullanabilirsiniz. KISS yorumlarınız hedefte ve JSON'dan bağımsız. JSON'un ne olduğuna odaklandığını (tanımladığınız gibi başarı verileri veya başarısızlık nedeni verileri) tutmak ve sürekli olarak bestelenmesi ve daha sonra çıkarılması gereken bazı karışıklıklarla kirletmekten daha iyidir. Sonra tüm yol gidebilir ve JSON verilerinizi Couchbase'de olduğu gibi saklayabilir ve uygulamaya olduğu gibi döndürebilirsiniz.
Dirk Bester

1
Belki de bunu bir "yararlı yük biçimi olması gerekiyordu" şeklinde formüle etmiş olmalıydım, ama bunun dışında yorumumun yanındayım. Oturum / hata verilerini HTML belgesinde gövde etiketinin nitelikleri olarak koyabilirsiniz , ancak bu bunu doğru veya mantıklı bir şekilde yapmaz.
Bojan Markovic

16

Değeri için bunu farklı yapıyorum. Başarılı bir çağrıda sadece JSON nesneleri bulunur. Gerçek ve JSON nesnesi olan bir yük alanı gösteren bir başarı alanı içeren bir üst düzey JSON nesneye ihtiyacım yok. Sadece uygun JSON nesnesini 200 veya başlıktaki HTTP durumu için 200 aralığında uygun olanı döndürürüm.

Ancak, bir hata varsa (400 ailesinde bir şey) iyi biçimli bir JSON hata nesnesi döndürürüm. Örneğin, istemci bir e-posta adresi ve telefon numarası ile bir kullanıcı POSTing ve bunlardan biri hatalı (yani temel veritabanına ekleyemezsiniz) böyle bir şey döndürür:

{
  "description" : "Validation Failed"
  "errors" : [ {
    "field" : "phoneNumber",
    "message" : "Invalid phone number."
  } ],
}

Buradaki önemli bitler, "field" özelliğinin, doğrulanamayan JSON alanıyla tam olarak eşleşmesi gerektiğidir. Bu, müşterilerin isteklerinde neyin yanlış gittiğini tam olarak bilmesini sağlar. Ayrıca, "ileti" isteğin yerel ayarında. Hem "emailAddress" hem de "phoneNumber" geçersizse, "error" dizisi her ikisi için de girişler içerir. Bir 409 (Çakışma) JSON yanıt gövdesi şöyle görünebilir:

{
  "description" : "Already Exists"
  "errors" : [ {
    "field" : "phoneNumber",
    "message" : "Phone number already exists for another user."
  } ],
}

HTTP durum kodu ve bu JSON ile istemci, hatalara belirli bir şekilde yanıt vermek için ihtiyaç duydukları her şeye sahiptir ve HTTP durum kodlarını değiştirmeyi tamamlamaya çalışan yeni bir hata standardı oluşturmaz. Bunların yalnızca 400 hata aralığında gerçekleştiğini unutmayın. 200 serisindeki herhangi bir şey için uygun olan her şeyi döndürebilirim. Benim için genellikle HAL benzeri bir JSON nesnesidir, ancak bu gerçekten önemli değildir.

Eklemeyi düşündüğüm bir şey, "hatalar" dizi girişlerinde veya JSON nesnesinin kökünde sayısal bir hata koduydu. Ama şu ana kadar ihtiyacımız olmadı.


9

Google, Facebook, Twitter, Amazon ve diğerleri gibi büyük yazılım devlerinin geri kalan api yanıt formatları üzerinde herhangi bir anlaşma yoktur, ancak bazı kişilerin yanıt formatını standartlaştırmaya çalıştığı yukarıdaki cevaplarda birçok bağlantı sağlanmıştır.

API'lerin ihtiyaçları farklı olabileceğinden, herkesi işe almak ve bazı formatları kabul etmek çok zordur. API'nızı kullanan milyonlarca kullanıcınız varsa neden yanıt biçiminizi değiştiresiniz?

Google, Twitter, Amazon ve internetteki bazı yayınlardan esinlenerek yanıt biçimini almam aşağıdadır:

https://github.com/adnan-kamili/rest-api-response-format

Yağma dosyası:

https://github.com/adnan-kamili/swagger-sample-template


1
içermeyen rest-api-yanıt biçimi için oy verin
Kerem Baydoğan

@adnan kamilli - >>> StatusCode: 304, ReasonPhrase: 'Değiştirilmedi', Sürüm: 1.1, İçerik: <boş>, Başlıklar: {} <<<< bu restApi'nin uygun bir yanıtı mı?
Arnold Brown

@ArnoldBrown Bu kodu hangi API bitiş noktası işlemi için döndürüyorsunuz?
adnan kamili

bir resim (form verileri) yüklemek için kullanılan bir api yanıt dönüşü - Müşteri yazılı api.
Arnold Brown

7

JSON'un amacı, tamamen dinamik ve esnek olmasıdır. İstediğiniz kaprise bükün, çünkü bu sadece tek bir düğüme dayanan bir dizi serileştirilmiş JavaScript nesnesi ve dizisidir.

Kök düğümün türü size bağlıdır, içerdiği şey size bağlıdır, yanıtla birlikte meta veri gönderip göndermediğiniz size bağlıdır, mime türünü ayarlayıp ayarlamamanıza application/jsonveya text/plainsize bağlı olarak ( kenar kasalarını nasıl kullanacağınızı bildiğiniz sürece).

Beğendiğiniz hafif bir şema oluşturun.
Şahsen, analitik izleme ve mp3 / ogg sunumu ile resim galerisi sunumu ve çevrimiçi oyun oynamak için metin mesajlaşma ve ağ paketlerinin ve blog yayınlarının ve blog yorumlarının hepsinin ne olduğu konusunda çok farklı gereksinimleri olduğunu buldum. gönderilen ve ne alınan ve nasıl tüketilmesi gerektiği.

Yani, istediğim son şey, her şeyi yaparken, her birini XML2.0 veya daha fazlasına dayanan aynı ortak standartlara uydurmaya çalışmaktır.

Bununla birlikte, size mantıklı ve iyi düşünülmüş şemaları kullanmak için söylenecek çok şey var .
Bazı API yanıtlarını okuyun, neyi sevdiğinizi not edin, neyi sevmediğinizi eleştirin, bu eleştirileri yazın ve sizi neden yanlış şekilde ovuşturduklarını anlayın ve sonra öğrendiklerinizi ihtiyacınız olana nasıl uygulayacağınızı düşünün.


1
Yanıtınız için teşekkür ederim, ancak yine de, yüklerin kendileri için endişelenmiyorum. Örneklerinizin tümü, yükler içinde gönderilen / alınan ve bu yüklerin nasıl tüketildiği konusunda çok farklı gerekliliklere sahip olsa da, hepsinin yanıtla ilgili olarak aynı sorunları çözmesi gerekir . Yani, hepsinin isteğin başarılı olup olmadığını belirlemesi gerekir. Eğer öyleyse, işleme devam edin. Değilse, neyin yanlış gittiğini. Sorumda bahsettiğim tüm API yanıtları için ortak olan bu ortak özellik .
FtDRbwLXw6

Her şey için 200 durumu döndürün ve kendinize belirli bir hata yükü tanımlayın veya yükün gövdesinde daha fazla ayrıntı içeren ve / veya içermeyen hatayla orantılı bir durum döndürün (destekleniyorsa). Dediğim gibi, şema size bağlı - meta / durum bilgileri dahil. Tercih ettiğiniz mimari tarzına dayanarak ne istediğinizi yapmak için% 100 boş bir sayfa.
Norguard

2
İstediğim gibi boş bir sayfa olduğunu anlıyorum. Sorumun amacı, yapıya göre ortaya çıkan herhangi bir standart olup olmadığını sormaktır. "JSON nedir ve nasıl kullanırım" diye sormuyordum, bunun yerine "İstediğim her şeyi döndürmek / yapılandırmak için JSON'u nasıl kullanacağımı biliyorum, ama kullanılan herhangi bir standart yapı olup olmadığını bilmek istiyorum popüler hale geliyor. " Soru ile yanlış anlaşırsam özür dilerim. Her neyse cevabınız için teşekkürler.
FtDRbwLXw6

7

JSON-RPC 2.0 standart bir istek ve yanıt formatı tanımlar ve REST API'leriyle çalıştıktan sonra taze bir soluk alır.


JSON-RPC_2.0'ın istisnalar için sunduğu tek şey bir hata kodudur? Sayısal bir hata kodu, ortaya çıkan sorunun aslına uygun olarak gösterilemez.
AgilePro

@AgilePro Kabul, sayısal bir hata kodu çok hoş değil ve keşke spec yazarları codealan bir String olmasına izin vermişti . Neyse ki spec, hata dataalanına istediğimiz bilgileri girmemizi sağlıyor . JSON-RPC projelerimde, genellikle tüm uygulama katmanı hataları için (standart protokol hatalarından birinin aksine) tek bir sayısal kod kullanıyorum. Sonra detaylı hata bilgilerini (gerçek hata türünü gösteren bir dize kodu dahil) dataalana koydum .
dnault

2

Daha sonra gelenler için, HAL, JSend ve JSON API'yi içeren kabul edilen cevaba ek olarak, incelemeye değer birkaç özellik daha ekleyeceğim:

  • W3C Önerisi olan ve JSON'da birlikte çalışabilir Web Hizmetlerinin nasıl oluşturulacağını belirten JSON-LD
  • " REST için basit ve sezgisel JSON tabanlı bir hipermedia türü" olduğunu iddia eden REST için Ion Hiper Ortam Türü

1

Önerilen temel çerçeve iyi görünüyor, ancak tanımlandığı gibi hata nesnesi çok sınırlı. Sorunu ifade etmek için çoğu zaman tek bir değer kullanılamaz ve bunun yerine bir problemler ve nedenler zincirine ihtiyaç vardır .

Biraz araştırma yaptım ve hata (istisnalar) döndürmek için en yaygın biçimin bu formun bir yapısı olduğunu buldum:

{
   "success": false,
   "error": {
      "code": "400",
      "message": "main error message here",
      "target": "approx what the error came from",
      "details": [
         {
            "code": "23-098a",
            "message": "Disk drive has frozen up again.  It needs to be replaced",
            "target": "not sure what the target is"
         }
      ],
      "innererror": {
         "trace": [ ... ],
         "context": [ ... ]
      }
   }
}

Bu, OASIS veri standardı OASIS OData tarafından önerilen formattır ve orada en standart seçenek gibi görünmektedir, ancak bu noktada herhangi bir standardın yüksek benimsenme oranları yoktur. Bu biçim JSON-RPC belirtimiyle tutarlıdır.

Bunu uygulayan tüm açık kaynak kütüphanesini şu adreste bulabilirsiniz: Mendocino JSON Utilities . Bu kütüphane istisnaların yanı sıra JSON Nesnelerini de destekler.

Ayrıntılar JSON REST API'sindeki Hata İşleme hakkındaki blog yayınımda tartışıldı


0

Sağduyunun dışında yasalara aykırı veya kanun kaçağı standardı yoktur. Bunu iki kişi gibi soyutlaştırırsak, standart birbirlerini en az zamanda en az zamanda doğru bir şekilde anlamaları için en iyi yoldur. Bizim durumumuzda, 'minimum sözcükler', bant genişliğini taşıma verimliliği için optimize etmektedir ve 'doğru bir şekilde anlamak' ayrıştırıcı verimliliğinin yapısıdır; sonuçta daha az veri ve ortak yapı ile sonuçlanır; böylece bir pim deliğinden geçebilir ve ortak bir kapsamdan (en azından başlangıçta) ayrıştırılabilir.

Neredeyse önerilen her durumda, 'Başarı' ve 'Hata' senaryosu için ayrı bir yanıt görüyorum ki bu benim için bir belirsizlik. Bu iki durumda yanıtlar farklıysa, o zaman neden gerçekten bir 'Başarı' bayrağı koymamız gerekiyor? 'Hata'nın yokluğunun' Başarı 'olduğu belli değil mi? 'Başarının' bir 'Hata' seti ile DOĞRU olduğu durumlarda yanıt almak mümkün müdür? Veya 'Hata' ayarlanmadığında 'Başarı' YANLIŞ mı? Sadece bir bayrak yeterli değil mi? Sadece 'Hata' bayrağı almayı tercih ederim, çünkü 'Başarı'dan daha az' Hata 'olacağına inanıyorum.

Ayrıca, gerçekten 'Hata' işaretini yapmalı mıyız? Birden fazla doğrulama hatasıyla yanıt vermek istersem ne olur? Bu nedenle, bu düğüme alt öğe olarak her hata ile bir 'Hata' düğümü olmasını daha verimli buluyorum; burada boş (sıfıra kadar sayar) bir 'Hata' düğümü 'Başarılı' anlamına gelir.


-2

Mobil geliştiriciler tarafından kolayca anlayabilen web apis için En İyi Yanıt.

Bu "Başarı" Yanıtıdır

{  
   "ReturnCode":"1",
   "ReturnMsg":"Successfull Transaction",
   "ReturnValue":"",
   "Data":{  
      "EmployeeName":"Admin",
      "EmployeeID":1
   }
}

Bu "Hata" Yanıtıdır

{
    "ReturnCode": "4",
    "ReturnMsg": "Invalid Username and Password",
    "ReturnValue": "",
    "Data": {}
}

2
Mülklerinizi standartlaştırmak daha iyi olur. Hepsi "Dönüş ..." değerleridir. Ancak Veri önekine sahip değildir. Tüm "Return" öneklerini bırakın.
z0mbi3

"Dönüş" de dahil olmak üzere oldukça fazladır.
Jack Marchetti
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.