swagger php передает параметры как json - PullRequest
0 голосов
/ 04 июля 2018

Итак, у меня есть комментарий, как показано ниже в моем php-коде, поэтому в основном я пытаюсь сгенерировать запрос ниже того типа, который принимает мой API.

У меня есть комментарии как ниже:

/**
* Login API
*
*

*@SWG\Definition(
*   definition="login",    
*   description="Enter your username",
*)

*@SWG\Definition(
*   definition="password",
*   type="string",
*   description="Enter your Password",
*)

* @SWG\Post(
* path="/user/login",
* description="Login API.",
* operationId="Login",
* produces={"application/json"},
* tags={"login"},
* consumes={"application/json"},

*@SWG\Parameter(
*          name="params",
*          in="body",
*          type="string",
*          default="params={""username"":""abc@abc.com"",""password"":""12345678""}",
*          description="Login Detail",
*          required=true,
*          @SWG\Schema(ref="#/definitions/login")
*),
*@SWG\Response(
*   response=200,
*   description="Token overview."
*),
*@SWG\Response(
*   response=401,
*   description="Unauthorized action.",
*),    
* )
*/

Ожидаемый результат

curl -X POST \
  http://localhost/project/api/web/user/login \
  -H 'cache-control: no-cache' \
  -H 'content-type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW' \
  -H 'postman-token: 78219bf9-85a4-420f-7637-55e2f0e51b11' \
  -F 'params={"username":"abc@abc.com","password":"12345678"}'

Фактический объем производства

curl -X POST "http://localhost/project/api/web/user/login" -H "accept: application/json" -H "Content-Type: application/json" -d "params={\"username\":\"abc@abc.com\",\"password\":\"12345678\"}"

В Swagger-ui, когда я пытаюсь его выполнить, выдается ошибка:

TypeError: Не удалось получить

Что я пробовал

  1. Изменить расход на "multipart / form-data" (та же ошибка)
  2. Если я изменю in = "body" на in = "query", то это работает, но я не могу это использовать. Так как требуется передать параметры в методе POST.
  3. Не может быть связано, но в консоли я получаю ошибку ниже:

root-injects.js: 95 TypeError: e.get (...). EntrySeq не является функцией в момент t.default (curlify.js: 23) в t.value (curl.jsx: 17) в t.render (root-injects.js: 93) at u._renderValidatedComponentWithoutOwnerOrContext (ReactCompositeComponent.js: 796) at u._renderValidatedComponent (ReactCompositeComponent.js: 819) at u._updateRenderedComponent (ReactCompositeComponent.js: 743) at u._performComponentUpdate (ReactCompositeComponent.js: 721) в updateComponent (ReactCompositeComponent.js: 642) в u.receiveComponent (ReactCompositeComponent.js: 544) в Object.receiveComponent (ReactReconciler.js: 122)

Так, что я должен сделать, чтобы решить эту проблему?

Ответы [ 3 ]

0 голосов
/ 11 июля 2018

Удалите атрибут по умолчанию из вашего параметра Swagger и скорее установите его в вашей схеме Swagger.

@SWG\Schema(
    @SWG\Property(property="username", type="string", example="abc@abc.com"),
    @SWG\Property(property="password", type="string", example="12345678")
)

Иначе, если вы хотите использовать определение чванства, установите свойство чванства, как указано выше в вашем определении.

0 голосов
/ 11 июля 2018

Это решается путем объединения ответов, предоставленных @Pusparaj и @ delboy1978uk

В основном я должен изменить in="body" на in="formData"

После этого я должен изменить свой комментарий, как показано ниже:

Ранее

*@SWG\Parameter(
*          name="params",
*          in="body",
*          type="string",
*          default="params={""username"":""abc@abc.com"",""password"":""12345678""}",
*          description="Login Detail",
*          required=true,
*          @SWG\Schema(ref="#/definitions/login")
*),

Обновлено

@SWG\Parameter(
    name="params",
    in="formData",
    type="string",
    default="params={""username"":""abc@abc.com"",""password"":""12345678""}",
    description="Login Detail",
    required=true,
    @SWG\Schema(
        @SWG\Property(property="username", type="string"),
        @SWG\Property(property="password", type="string")
    )
),
0 голосов
/ 09 июля 2018

Измените in="body", на in="formData",. Вуаля.

...