Parser OpenAPI — łączenie schematów

· Funkcje

Od sgcOpenAPI 2024.9.0 parser został ulepszony o następujące nowe funkcje:

- Łączenie specyfikacji: jeśli specyfikacja składa się z wielu schematów, parser może je połączyć w pojedynczy plik specyfikacji.

- Wyjściowe parametry parsera: przy tworzeniu interfejsu pascal, parametry użyte do importu specyfikacji są zapisywane w nagłówku pliku pascal.

- Utworzono nowe zdarzenie dla klienta sgcOpenAPI, OnBeforeRequest, którego można użyć do dostosowania żądania HTTP przed wysłaniem na serwer.

Łączenie specyfikacji

Gdy dokumenty OpenAPI lub JSON Schema stają się ogromne lub powtarzalne, treść można podzielić na wiele dokumentów (w systemie plików, URL-ach, pamięci) i połączyć za pomocą $ref. Te podzielone opisy API można następnie z powrotem złożyć w jeden dokument, w którym $ref wskazują lokalizację wewnętrzną zamiast zewnętrznej. Nazywa się to „łączeniem".

Teraz parser sgcOpenAPI obsługuje łączenie specyfikacji openAPI. Odbywa się to automatycznie przy imporcie pliku.

Podzielona specyfikacja OpenAPI


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'        

Połączona specyfikacja

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 

Wyjściowe parametry parsera

 Plik pascal utworzony ze specyfikacji openAPI zawiera teraz parametry użyte do importu pliku openAPI. Te parametry są tworzone jako komentarze na górze pliku 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
  *************************************************************************** } 

Zdarzenie OnBeforeRequest

This event is called before the HTTP request is called. Allows to customize the Parameter names, Headers, security... Poniżej znajdziesz an example how to replace the name of some parameters.

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;