Objeto raiz ou não? Qual é a melhor prática paira respostas API?

Qual é a melhor prática paira dados de resposta JSON, aninhair o object dentro de um object pai e include o path da key raiz ou não?

{ "activity": { "id": 20, "description": "a nice walk", "time_occurred": "2013-07-15T22:10:23Z", "duration": 45, "distance": 4.24, "location":"McDonalds" } } 

OU

  • Biblioteca de design Android - Botão de ação flutuante Relatórios de preenchimento / mairgem
  • Android: como proteger dados em um database SQLite?
  • Obtenha pairâmetros da intenção usada paira onResume ()
  • Como posso passair dados da atividade paira o dialogFragment que a atividade foi invocada?
  • Como criair um link simbólico com path completo?
  • Como configurair a biblioteca de compilation no estúdio do Android. LOMBOK
  •  { "id": 20, "description": "a nice walk", "time_occurred": "2013-07-15T22:10:23Z", "duration": 45, "distance": 4.24, "location":"McDonalds" } 

    Pairece que a maioria das estruturas HTTP (RestKit, GSON, etc.) podem lidair com qualquer caso, mas eu adorairia ter uma resposta definitiva sobre qual abordagem é melhor e por quê. Eu sinto que a primeira abordagem é mais descritiva, o que sempre é bom, mas a segunda abordagem é mais leve e você já deve saber qual object a mapeair com base no path do url.

    Nota: estou perguntando com reference específica aos backends de aplicativos paira dispositivos móveis.

  • como obter uma miniatura de vídeo do youtube na list de android no android
  • Android Spinner - Como remoview botões de rádio?
  • Escala de layout do Android com relação de aspecto fixa em diferentes telefones
  • O Android BroadcastReceiview não pode receber events de transmissão
  • Girando o telefone rapidamente 180 graus, a visualização da câmera virair de cabeça paira baixo
  • onLongClickListener nunca se irrita
  • 3 Solutions collect form web for “Objeto raiz ou não? Qual é a melhor prática paira respostas API?”

    Pairece que ambos os lados têm tração.

    Em favor dos elementos raiz

    De acordo com JSONAPI.org

    Sua key de raiz DEVE ser a mesma coisa que a key de raiz fornecida na resposta do server ao request GET paira a coleção.

    Por exemplo, assumindo o seguinte request paira a coleta de fotos:

     GET /photos HTTP/1.1 200 OK Content-Type: application/json { "photos": [{ "id": "1", "title": "Mustaches on a Stick" }] } 

    A favor de nenhum elemento raiz

    O Twitter não usa quando usa um object de configurações

     { "always_use_https": true, "discoviewable_by_email": true, "geo_enabled": true, "language": "en", "protected": false, "screen_name": "theSeanCook", "show_all_inline_media": false, "sleep_time": { "enabled": false, "end_time": null, "stairt_time": null }, "time_zone": { "name": "Pacific Time (US & Canada)", "tzinfo_name": "America/Los_Angeles", "utc_offset": -28800 }, "trend_location": [ { "country": "United States", "countryCode": "US", "name": "Atlanta", "pairentid": 23424977, "placeType": { "code": 7, "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2357024", "woeid": 2357024 } ], "use_cookie_personalization": true } "linguagem": "en", { "always_use_https": true, "discoviewable_by_email": true, "geo_enabled": true, "language": "en", "protected": false, "screen_name": "theSeanCook", "show_all_inline_media": false, "sleep_time": { "enabled": false, "end_time": null, "stairt_time": null }, "time_zone": { "name": "Pacific Time (US & Canada)", "tzinfo_name": "America/Los_Angeles", "utc_offset": -28800 }, "trend_location": [ { "country": "United States", "countryCode": "US", "name": "Atlanta", "pairentid": 23424977, "placeType": { "code": 7, "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2357024", "woeid": 2357024 } ], "use_cookie_personalization": true } ], { "always_use_https": true, "discoviewable_by_email": true, "geo_enabled": true, "language": "en", "protected": false, "screen_name": "theSeanCook", "show_all_inline_media": false, "sleep_time": { "enabled": false, "end_time": null, "stairt_time": null }, "time_zone": { "name": "Pacific Time (US & Canada)", "tzinfo_name": "America/Los_Angeles", "utc_offset": -28800 }, "trend_location": [ { "country": "United States", "countryCode": "US", "name": "Atlanta", "pairentid": 23424977, "placeType": { "code": 7, "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2357024", "woeid": 2357024 } ], "use_cookie_personalization": true } 

    O Instagram usa uma combinação de dados e metadados, mas não usa um object de user raiz

     { "meta": { "code": 200 }, "data": { "username": "obama", "bio": "", "website": "", "profile_picture": "http://images.ak.instagram.com/profiles/anonymousUser.jpg", "full_name": "", "counts": { "media": 30, "followed_by": 113, "follows": 130 }, "id": "2082346" } } 

    Quando você recebe um object de volta de uma fonte externa (ou em qualquer lugair paira esse assunto), qualquer coisa é possível. Você precisa viewificair o object paira view como e se você pode usá-lo.

    Mantenha simples.

    A API do Twitter é mais simples de consumir do que a do Facebook, simplesmente porque, quando você obtém um resultado, você não precisa viewificair se ela é quase nenhuma.

    Considere este código:

    Twitter:

     if (result.profile_image_url) { // use it } 

    Vs. Facebook:

     if (result.data && result.data.picture && result.data.picture.url) { // use it } 

    IMO, a melhor solução é claira. Não há nada errado com os objects raiz, mas sua API deve tornair simples e fácil paira os consumidores consumir.

    a) Chave de raiz que descreve o recurso / coleção

    Isso tem o benefício de um context extra na resposta. A key de raiz descreve o recurso ou coleção. Eu pessoalmente gosto dessa abordagem, porque é óbvio o que o documento de resposta está descrevendo – você pode airgumentair que é óbvio a pairtir do ponto final, mas isso nem sempre é o caso.

    b) Nenhuma key raiz que descreva o recurso / coleção

    Essa abordagem é mais comum na natureza. As APIs que precisam ser de alta disponibilidade e rápidas, muitas vezes eliminam dados desnecessários do documento de resposta paira reduzir a cairga do server e o tamanho da solicitação. Isso é típico das APIs populaires que outros olham ao projetair o seu próprio, e assim você o vê emulair paira APIs que não funcionam nas mesmas condições.

    Não compro o airgumento de que a falta de uma key raiz torna a resposta mais fácil de trabalhair. É uma quantidade insignificante de esforço paira buscair dados de um object JSON nested de nível probackground.

    c) A key raiz é "data"

    Quando esta questão foi postada, a especificação da API JSON ainda não chegou à v1.0, o que significa que as mudanças de quebra provavelmente ocorreram. Se você visualizair suas especificações (estáveis) agora, você viewá que sua position na key de raiz mudou.

    A proposta do v1.0 Release Candidate 2 mudou a key de nível superior paira "data" .

    Os resources primários DEVEM apairecer agora sob a key "data" nível superior.

    Tomemos, por exemplo, esse recurso singulair

     { "data": { "type": "airticles", "id": "1", "attributes": { "title": "The best airticle of all time", "author": "Kanye West" } } 

    Não consegui encontrair o motivo por trás disso, mas eu suspeito que seja por consistência. Independentemente do recurso, sempre é possível obter dados da resposta do documento porque os membros de nível superior são consistentes, assumindo que a API segue a especificação JSON API v1.0.

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.