Noções básicas sobre modelos de caminho

No gateway de API, é possível rotear solicitações recebidas com base no modelo de caminho. Um modelo de caminho tem três componentes principais:

  • Correspondência exata
  • Correspondência de caractere curinga único
  • Correspondência de caractere curinga dupl

As seções a seguir descrevem cada um desses componentes e como eles funcionam no contexto do gateway de API.

Correspondência exata

Um caminho com modelo sem segmentos curinga únicos ou duplos (* ou **) é convertido em uma correspondência de caminho exata. Por exemplo, a especificação OpenAPI da configuração da API do gateway pode conter uma seção como esta

...
paths:
  /shelves:
    get:
      summary: List shelves
...

Neste exemplo, o gateway aceita apenas solicitações para /shelves e nenhum outro caminho.

Correspondência de caractere curinga único

Se um caminho com modelo tiver uma variável, um segmento de caractere curinga singular ({var}) ou, somente no OpenAPI 2.0, um segmento de caractere curinga singular ({var=*}), o gateway permitirá solicitações de entrada que estejam em conformidade com o seguinte:

  • As solicitações não contêm uma barra (/), o que significa que a variável corresponderá apenas a um único segmento de caminho.
  • As solicitações contêm pelo menos um caractere.
  • As solicitações podem conter uma barra extra no final do caminho.

Por exemplo, a especificação OpenAPI da configuração da API do gateway pode conter uma seção como esta

...
paths:
  /shelves/{shelf}/books/{book}:
    get:
      summary: Retrieve a book
...

Neste exemplo, o gateway aceitará solicitações que correspondam à seguinte expressão regular:

^/shelves/[^/]+/books/[^/]+/?$

Correspondência de caracteres curinga duplos

Se um caminho com modelo contiver uma variável indicada por um segmento de caractere curinga duplo (por exemplo, {var=**}), o gateway permitirá solicitações recebidas que estejam em conformidade com o seguinte:

  • As solicitações podem conter todos caracteres, incluindo barras (/).
  • As solicitações podem conter 0 ou mais caracteres.
  • As solicitações podem conter uma barra extra no final do caminho.

Por exemplo, a especificação OpenAPI da configuração da API do gateway pode conter uma seção como esta

OpenAPI 2.0

...
paths:
  /shelves/{shelf=*}/books/{book=**}:
    get:
      summary: Retrieve a book
...

OpenAPI 3.x

...
paths:
  /shelves/{shelf}/books/{book}:
    get:
      summary: Retrieve a book
      parameters:
      - name: shelf
        in: path
        schema:
          type: string
      - name: book
        in: path
        schema:
          type: string
        x-google-parameter:
          pattern: '**'
...

Neste exemplo, o gateway aceitará solicitações em que o parâmetro book corresponda a qualquer caractere, incluindo barras. Isso corresponde à seguinte expressão regular:

^/shelves/[^/]+/books/.*/?$

Barras codificadas por URL

O gateway de API segue RFC 3986, que não trata barras de URL codificadas (%2F) como barras reais ao corresponder caminhos de URL para roteamento ou decisões de segurança. Se forem esperadas barras codificadas de URL, o back-end deverá processar essas solicitações adequadamente.

Por exemplo, considere a seguinte especificação OpenAPI:

securityDefinitions:
  api_key:
    type: "apiKey"
    name: "key"
    in: "query"
paths:
  /shelves/{shelf}:
      get:
        parameters:
        - in: path
          name: shelf
          type: string
          required: true
          description: Shelf ID.
        summary: List shelves
        operationId: GetShelf
          responses: