web-dev-qa-db-fra.com

API Swagger qui a une chaîne de requête

Je souhaite déployer une API contenant une chaîne de requête. Il s'agit de l'API

v1/products?q=circuit breaker&locale=en-GB&pageSize=8&pageNo=1&project=GLOBAL

Voici comment j'implémente

"/v1/products?q={searchText}&locale={ctrCode}&pageSize={pageSize}&pageNo={pageNo}&project={project}&country={country}":{  
         "get":{  
            "tags":[  
               "Search Text"
            ],
            "summary":"Get Products by searching text, countrycode, page number, pagesize, project and country(optional)",
            "description":"Get Products by searching text, countrycode, page number, pagesize, project and country(optional)",
            "operationId":"getProductName",
            "produces":[  
               "application/json",
               "application/xml"
            ],
            "parameters":[  
               {  
                  "name":"searchText",
                  "in":"path",
                  "description":"The Product that needs to be fetched",
                  "required":true,
                  "type":"string"
               },
               {  
                  "name":"ctrCode",
                  "in":"path",
                  "description":"The Product locale needs to be fetched. Example=en-GB, fr-FR, etc.",
                  "required":true,
                  "type":"string"
               },
               {  
                  "name":"pageSize",
                  "in":"path",
                  "description":"The Product PageSize that needs to be fetched. Example=10, 20 etc.",
                  "required":true,
                  "type":"number"
               },
               {  
                  "name":"pageNo",
                  "in":"path",
                  "description":"The Product pageNo that needs to be fetched. Example=1,2 etc.",
                  "required":true,
                  "type":"number"
               },
               {  
                  "name":"project",
                  "in":"path",
                  "description":"The Project that needs to be fetched. Example=Mypact, DSL etc.",
                  "required":true,
                  "type":"string"
               },
               {  
                  "name":"country",
                  "in":"header",
                  "description":"The Country that needs to be fetched. Example=France, India etc.",
                  "required":false,
                  "type":"string"
               }
            ],
            "responses":{  
               "200":{  
                  "description":"successful operation",
                  "schema":{  
                     "$ref":"#/definitions/Products"
                  }
               },
               "400":{  
                  "description":"Invalid Product_id supplied"
               },
               "404":{  
                  "description":"Product not found"
               }
            }
         }
      }

Le pays est un paramètre facultatif dans ce cas. Je souhaite que l'URL affiche le pays uniquement lorsque l'utilisateur saisit une valeur, sinon elle ne doit pas être affichée dans l'URL.

18
schneider

Vous ne pouvez pas décrire les paramètres de requête comme faisant partie du chemin dans Swagger. Vous devez les déclarer explicitement en tant que paramètres de requête.

"/v1/products":{  
         "get":{  
            "tags":[  
               "Search Text"
            ],
            "summary":"Get Products by searching text, countrycode, page number, pagesize, project and country(optional)",
            "description":"Get Products by searching text, countrycode, page number, pagesize, project and country(optional)",
            "operationId":"getProductName",
            "produces":[  
               "application/json",
               "application/xml"
            ],
            "parameters":[  
               {  
                  "name":"searchText",
                  "in":"query",
                  "description":"The Product that needs to be fetched",
                  "required":true,
                  "type":"string"
               },
               {  
                  "name":"ctrCode",
                  "in":"query",
                  "description":"The Product locale needs to be fetched. Example=en-GB, fr-FR, etc.",
                  "required":true,
                  "type":"string"
               },
               {  
                  "name":"pageSize",
                  "in":"query",
                  "description":"The Product PageSize that needs to be fetched. Example=10, 20 etc.",
                  "required":true,
                  "type":"number"
               },
               {  
                  "name":"pageNo",
                  "in":"query",
                  "description":"The Product pageNo that needs to be fetched. Example=1,2 etc.",
                  "required":true,
                  "type":"number"
               },
               {  
                  "name":"project",
                  "in":"query",
                  "description":"The Project that needs to be fetched. Example=Mypact, DSL etc.",
                  "required":true,
                  "type":"string"
               },
               {  
                  "name":"country",
                  "in":"query",
                  "description":"The Country that needs to be fetched. Example=France, India etc.",
                  "required":false,
                  "type":"string"
               }
            ],
            "responses":{  
               "200":{  
                  "description":"successful operation",
                  "schema":{  
                     "$ref":"#/definitions/Products"
                  }
               },
               "400":{  
                  "description":"Invalid Product_id supplied"
               },
               "404":{  
                  "description":"Product not found"
               }
            }
         }
      }
23
Ron

Votre paramètre IN doit être "requête" et non "chemin"

Cela devrait fonctionner:

"parameters": [
  {  
    "name":"country",
    "in":"query",
    "description":"The Country that needs to be fetched. Example=France, India etc.",
    "required":false,
    "type":"string"
  }
]
7
Mohammed Shafeek