Как определить два разных ответа для одного и того же кода ответа с 302 Redirect? - PullRequest
0 голосов
/ 21 февраля 2020

Я пытаюсь установить два разных ответа 302 в API out, поскольку наш API перенаправляет на другую конечную точку в зависимости от отправленного запроса. Я в настоящее время использую Open API версии 3.0.1. Как мне это сделать?

Мне просто нужны два разных заголовка местоположения для редиректа 302, описывающего, почему возвращается конкретный заголовок местоположения. Или иметь два одинаковых 302 кода ответа

I basically just want two different Location Headers for the 302 redirect describing how why the particular Location header is returned

Я подписался на эту старую ветку. Но это не правильно ссылаются на два разных заголовка Location в фактической конечной точке API и вместо этого просто показывают пустой заголовок Location.

Фрагмент моего кода:

  responses:
    '200':
      description: 'Sample 200 Response'
    '302':
      description: 'Sample 302 Responses. See <302ExpiredRefreshTokenstring> & <302ExpiredUserRefreshTokenstring> schemas for reference'
      headers:
        Location:
          schema:
            oneOf:
              - $ref: '#/components/schemas/302ExpiredRefreshToken'
              - $ref: '#/components/schemas/302ExpiredUserRefreshToken'

И схема:

components:
  schemas:
    302ExpiredRefreshToken:
      type: string
      example: 'www.<UIEndpoint>/ref-login?SessionId=d3fe5c6959ae0ce502d6027a7693c3ebe4543f51a878d60004e1331723fc0187&redirect_uri=https://www.lazada.com.ph&state=sample_state_54321&refresh_token=sCY2O0kev5Ic516A1INnQwRc8D1hbuOJ&BillerCode=00494&UserId=JBC_28'
      description: Redirect URI if Refresh Token (FinTech) has already expired.
    302ExpiredUserRefreshToken:
      type: string
      example: 'www.<UIEndpoint>/cpw-login?SessionId=d3fe5c6959ae0ce502d6027a7693c3ebe4543f51a878d60004e1331723fc0187&redirect_uri=https://www.lazada.com.ph&state=sample_state_54321&refresh_token=sCY2O0kev5Ic516A1INnQwRc8D1hbuOJ&BillerCode=00494&UserId=JBC_28'
  description: Redirect URI if User Refresh Token (DigiFi) has already expired. This could be triggered even if the Refresh Token (FinTech) has not expired yet.

Добавление нескольких примеров также не работает, так как не показывает несколько примеров, вместо этого это просто пустой

headers:
            Location:
              schema:
                type: string
              examples: 
                'test1':
                  value: 'value1'
                'test2':
                  value: 'value2'
              description: 'Description of Location Header'

Но несколько примеров для заголовка работают, когда помещаются в запрос. параметры, как я добавил примеры в запросе, как это.

 parameters:
          name: Location
          in: header
          examples:       
            test1:         
              value: 'value2'   
              summary: 'summary 1'
            test2: 
              value: 'value 1'  
              summary: 'summary 2' 

1 Ответ

2 голосов
/ 21 февраля 2020

Нет необходимости в нескольких схемах для заголовка Location, поскольку тип данных в обоих случаях одинаков - type: string. Вместо этого добавьте несколько examples значения заголовка:

      responses:
        ...
        '302':
          description: Some token has expired... Clients should follow the `Location` header to refresh the token.
          headers:
            Location:
              description: URI where the client can refresh the expired token.
              schema:
                type: string
                format: uri  # Optional - use if the Location header is an absolute URI, starting with http(s)://
              examples:
                302ExpiredRefreshToken:
                  description: Redirect URI if Refresh Token (FinTech) has already expired
                  value: 'www.<UIEndpoint>/ref-login?SessionId=d3fe5c6959ae0ce502d6027a7693c3ebe4543f51a878d60004e1331723fc0187&redirect_uri=https://www.lazada.com.ph&state=sample_state_54321&refresh_token=sCY2O0kev5Ic516A1INnQwRc8D1hbuOJ&BillerCode=00494&UserId=JBC_28'
                302ExpiredUserRefreshToken:
                  description: >-
                    Redirect URI if User Refresh Token (DigiFi) has already expired.
                    This could be triggered even if the Refresh Token (FinTech) has not expired yet.
                  value: 'www.<UIEndpoint>/cpw-login?SessionId=d3fe5c6959ae0ce502d6027a7693c3ebe4543f51a878d60004e1331723fc0187&redirect_uri=https://www.lazada.com.ph&state=sample_state_54321&refresh_token=sCY2O0kev5Ic516A1INnQwRc8D1hbuOJ&BillerCode=00494&UserId=JBC_28'

Но, поскольку вы используете Swagger UI, обратите внимание, что в настоящее время он не отображает examples в заголовках ответов. Следите за обновлениями: https://github.com/swagger-api/swagger-ui/issues/5432

...