OpenAPI Parser: Bundle de esquemas

· Características

Desde sgcOpenAPI 2024.9.0 el parser se ha mejorado con las siguientes funcionalidades nuevas:

- Bundle Specification: si la especificación se construye con varios esquemas, el parser puede agruparlos en un único archivo de especificación.

- Output Parser Parameters: al crear la interfaz Pascal, los parámetros usados para importar las especificaciones se escriben en la cabecera del archivo Pascal.

- Se ha creado un nuevo evento para el cliente sgcOpenAPI, OnBeforeRequest, que se puede usar para personalizar la petición HTTP antes de enviarla al servidor.

Bundle Specification

Cuando los documentos OpenAPI o JSON Schema se vuelven enormes o repetitivos, el contenido se puede dividir en varios documentos (en el sistema de archivos, URLs, en memoria) y unirlos mediante $ref. Estas descripciones de API divididas se pueden volver a unir en un único documento, con $ref apuntando a una ubicación interna en lugar de externa. Esto se llama "bundling".

Ahora el sgcOpenAPI Parser soporta hacer bundle de especificaciones openAPI. Se realiza automáticamente al importar un archivo.

Especificación OpenAPI dividida


openapi: 3.0.0
info:
  title: My API
  version: 1.0.0
paths:
  /things:
    get:
      responses: 
        '200':
          description: 'OK'
          content:
            application/json:
              schema:
                properties:
                  data:
                    type: array
                    items:
                      $ref: './schemas/thing.yaml'
  /things/{id}:
    get:
      parameters: 
        - name: id 
          in: path
          required: true
          schema: 
            type: string
            format: uuid
      responses: 
        '200':
          description: 'OK'
          content:
            application/json:
              schema:
                $ref: './schemas/thing.yaml'        

Especificación con bundle

openapi: 3.0.0
info:
  title: My API
  version: 1.0.0
paths:
  /things:
    get:
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                properties:
                  data:
                    type: array
                    items:
                      $ref: '#/paths/~1things~1%7Bid%7D/get/responses/200/content/application~1json/schema'
  '/things/{id}':
    get:
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: string
            format: uuid
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  id:
                    type: string
                    format: uuid
                  name:
                    type: string
                  type:
                    type: string
                    enum:
                      - type1
                      - type2 

Output Parser Parameters

 El archivo Pascal creado a partir de la especificación openAPI ahora contiene los parámetros usados para importar el archivo openAPI. Estos parámetros se crean como comentarios en la parte superior del archivo Delphi.

{ ***************************************************************************  
  sgcOpenAPI component                                                         
  written by eSeGeCe                                                           
  copyright © 2024                                                             
  Email : info@esegece.com
  Web : http://www.esegece.com                                                 
  Source: D:\Downloads\ICAR-ADE-1\url-schemes\registrationURLScheme.json
  Parsed At: 2024-10-02 10:12:18
  Options: [Generate Classes] [Enable Classes] [Documentation]
  Authentication: Token
  Method Name: OperationId
  Base URL: https://spec.openapi.com
  *************************************************************************** } 

Evento OnBeforeRequest

Este evento se llama antes de que se realice la petición HTTP. Permite personalizar los nombres de los parámetros, las cabeceras, la seguridad... A continuación encontrarás un ejemplo de cómo reemplazar el nombre de algunos parámetros.

procedure OnBeforeRequestEvent(Sender: TObject; const aRequest: TsgcOpenAPIRequest);
var
  i: Integer;
  oParameter: TsgcOpenAPIParameter;
begin
  for i := 0 to aRequest.Parameters.Count - 1 do
  begin
    oParameter := aRequest.Parameters[i];
    if oParameter._Name = 'meta-modified-from' then
      oParameter._name := 'eventDateTime-from';
    if oParameter._Name = 'meta-modified-to' then
      oParameter._name := 'eventDateTime-to';
  end;
end;