0

J'utilise Google Endpoints Framework avec Python (https://cloud.google.com/endpoints/docs/frameworks/python/get-started-frameworks-python) et j'ai construit des API REST avec celui-ci.Retourne un tableau JSON comme réponse à l'aide de Google Cloud Endpoints Framework en Python

Je suis en mesure de retourner l'objet JSON (dictionnaires) dans la réponse comme:

{ 
    "items":[ 
     { 
      "id": "brand_1_id", 
      "name": "Brand 1" 
     }, 
     { 
      "id": "brand_2_id", 
      "name": "Brand 2" 
     } 
    ] 
} 

Cependant, je ne suis pas en mesure de retourner un tableau JSON (liste) comme réponse comme:

[ { "id": "brand_1_id", "name": "Marque 1" }, { "id": "brand_2_id", "name": "Marque 2" } ]

Voici les nouveaux extraits de code que j'ai utilisé pour retourner la réponse

suivants sont les classes créées pour envoyer une réponse:

class BrandResponse(messages.Message): 
    id=messages.StringField(1, required=True) 
    brandName = messages.StringField(2, required=True) 
    brandEmail=messages.StringField(3, required=True) 
    brandPhone=messages.StringField(4,required=True) 
    brandAddress=messages.StringField(5,required=True) 
    brandCity=messages.StringField(6,required=True) 
    brandState=messages.StringField(7,required=True) 
    brandCountry=messages.StringField(8,required=True) 
    brandPostalCode=messages.StringField(9,required=True) 

class MultipleBrandResponse(messages.Message): 
    items=messages.MessageField(BrandResponse,1,repeated=True) 

Ce qui suit est la méthode qui traite la demande:

@endpoints.method(
     MULTIPLE_BRAND_PAGINATED_CONTAINER, 
     MultipleBrandResponse, 
     path='brand', 
     http_method='GET', 
     name='Get Brands', 
     audiences=firebaseAudience 
    ) 
    def getBrands(self,request): 
     brandResponse=[] 

     query = BrandDB.query() 
     brands = query.fetch(request.limit, offset=request.start) 
     for brand in brands: 
      brandResponse.append(BrandResponse(
      id=brand.key.urlsafe(), 
      brandName=brand.name, 
      brandAddress=brand.address, 
      brandCity=brand.city, 
      brandState=brand.state, 
      brandCountry=brand.country, 
      brandPostalCode=brand.postalCode, 
      brandPhone=brand.phone, 
      brandEmail=brand.email)) 

     print("Brand count: "+str(brandResponse.count)) 

     if len(brandResponse) == 0: 
      raise endpoints.NotFoundException("No brands") 

     return MultipleBrandResponse(items=brandResponse) 

Une idée de comment retourner tableau JSON directement plutôt que de placer une clé à l'intérieur d'un objet JSON.

Répondre

1

La structure est conçue autour des messages de retour de tampon de protocole, pas JSON. Il est possible que vous ayez spécifié un message correspondant à cette structure. difficile à dire sans voir votre code.

+0

J'ai aussi mis à jour la question pour inclure le code réel. – Tejas

+0

Vous n'utilisez pas d'objets JSON. Vous utilisez des messages de tampon de protocole; MultipleBrandResponse est un message avec un champ, qui contient une liste de messages BrandResponse. La "racine" d'une réponse de tampon de protocole doit être un seul message, pas une liste de messages. –

+0

Vous pensez avoir raison. Donc, en utilisant les tampons de protocole et en créant une API REST, il n'y a aucun moyen d'obtenir plusieurs messages et donc le tableau JSON en guise de réponse. – Tejas