.. index:: single: open_api .. _open_api/0: .. rst-class:: right **object** ``open_api`` ============ OpenAPI 3.1.0 document derivation, parsing, generation, and validation built on top of the ``json`` and ``json_schema`` libraries. | **Availability:** | ``logtalk_load(open_api(loader))`` | **Author:** Paulo Moura | **Version:** 1:0:1 | **Date:** 2026-06-26 | **Compilation flags:** | ``static, context_switching_calls`` | **Imports:** | ``public`` :ref:`http_json_term_helpers ` | **Uses:** | :ref:`http_core ` | :ref:`json ` | :ref:`json_schema ` | :ref:`list ` | :ref:`url(Representation) ` | :ref:`user ` | **Remarks:** | (none) | **Inherited public predicates:** | (none) .. contents:: :local: :backlinks: top Public predicates ----------------- .. index:: document/2 .. _open_api/0::document/2: ``document/2`` ^^^^^^^^^^^^^^ Derives an OpenAPI 3.1.0 document in the repository-standard JSON term representation from an object implementing the ``open_api_provider_protocol`` protocol. When the provider also implements the ``application_protocol`` protocol, missing ``description`` and ``license`` info fields may be backfilled from application metadata and ``homepage/1`` may be mapped to the top-level ``externalDocs`` object. Top-level security defaults declared by ``security/1`` are emitted under the root ``security`` field. Reusable security schemes declared by ``security_scheme/2`` are emitted under ``components.securitySchemes`` and referenced scheme names and OAuth flow scopes are validated against those declarations when locally available. | **Compilation flags:** | ``static`` | **Template:** | ``document(Provider,Document)`` | **Mode and number of proofs:** | ``document(+object_identifier,-compound)`` - ``one`` ------------ .. index:: parse/2 .. _open_api/0::parse/2: ``parse/2`` ^^^^^^^^^^^ Parses an OpenAPI document from the given source (``file(Path)``, ``stream(Stream)``, ``codes(List)``, ``chars(List)``, or ``atom(Atom)``) into the JSON term representation used by the ``json`` library. | **Compilation flags:** | ``static`` | **Template:** | ``parse(Source,Document)`` | **Mode and number of proofs:** | ``parse(++compound,--term)`` - ``one_or_error`` | **Exceptions:** | ``Source`` is a variable: | ``instantiation_error`` | ``Source`` is neither a variable nor a valid JSON source term or does not contain parsable JSON by the implementation: | ``domain_error(json_source,Source)`` ------------ .. index:: generate/2 .. _open_api/0::generate/2: ``generate/2`` ^^^^^^^^^^^^^^ Generates the representation specified in the first argument (``file(Path)``, ``stream(Stream)``, ``codes(List)``, ``chars(List)``, or ``atom(Atom)``) for an OpenAPI document term using JSON serialization. | **Compilation flags:** | ``static`` | **Template:** | ``generate(Sink,Document)`` | **Mode and number of proofs:** | ``generate(+compound,++term)`` - ``one_or_error`` | **Exceptions:** | ``Sink`` is a variable: | ``instantiation_error`` | ``Sink`` is neither a variable nor a valid JSON sink term: | ``domain_error(json_sink,Sink)`` | A JSON version of ``Document`` cannot be generated by the implementation: | ``domain_error(json_sink,Document)`` ------------ .. index:: validate_document/1 .. _open_api/0::validate_document/1: ``validate_document/1`` ^^^^^^^^^^^^^^^^^^^^^^^ Succeeds if the given OpenAPI document term is valid according to the phase-1 OpenAPI validation schema. | **Compilation flags:** | ``static`` | **Template:** | ``validate_document(Document)`` | **Mode and number of proofs:** | ``validate_document(+term)`` - ``zero_or_one`` ------------ .. index:: validate_document/2 .. _open_api/0::validate_document/2: ``validate_document/2`` ^^^^^^^^^^^^^^^^^^^^^^^ Validates an OpenAPI document term and returns a list of validation errors (empty list if valid). | **Compilation flags:** | ``static`` | **Template:** | ``validate_document(Document,Errors)`` | **Mode and number of proofs:** | ``validate_document(+term,--list)`` - ``one`` ------------ .. index:: operation/3 .. _open_api/0::operation/3: ``operation/3`` ^^^^^^^^^^^^^^^ Resolves an operation descriptor exposed by a provider object using its ``operationId`` atom. | **Compilation flags:** | ``static`` | **Template:** | ``operation(Provider,OperationId,Operation)`` | **Mode and number of proofs:** | ``operation(+object_identifier,+atom,-compound)`` - ``one_or_error`` | **Exceptions:** | ``Provider`` does not expose the requested ``operationId``: | ``existence_error(open_api_operation,OperationId)`` | ``Provider`` exposes duplicated ``operationId`` values: | ``domain_error(open_api_operation_id,duplicate(Id))`` ------------ .. index:: validate_request/3 .. _open_api/0::validate_request/3: ``validate_request/3`` ^^^^^^^^^^^^^^^^^^^^^^ Succeeds when the given normalized HTTP request term or object implementing the ``http_request_protocol`` protocol conforms to the provider operation descriptor identified by the given ``operationId``. | **Compilation flags:** | ``static`` | **Template:** | ``validate_request(Provider,OperationId,Request)`` | **Mode and number of proofs:** | ``validate_request(+object_identifier,+atom,++term)`` - ``zero_or_one`` ------------ .. index:: validate_request/4 .. _open_api/0::validate_request/4: ``validate_request/4`` ^^^^^^^^^^^^^^^^^^^^^^ Validates a normalized HTTP request term or an object implementing the ``http_request_protocol`` protocol against the provider operation descriptor identified by the given ``operationId`` and returns any contract errors. | **Compilation flags:** | ``static`` | **Template:** | ``validate_request(Provider,OperationId,Request,Errors)`` | **Mode and number of proofs:** | ``validate_request(+object_identifier,+atom,++term,--list)`` - ``one`` ------------ .. index:: validate_http_request/3 .. _open_api/0::validate_http_request/3: ``validate_http_request/3`` ^^^^^^^^^^^^^^^^^^^^^^^^^^^ Succeeds when an HTTP request wire source parsed by the ``http_core`` library conforms to the provider operation descriptor identified by the given ``operationId``. | **Compilation flags:** | ``static`` | **Template:** | ``validate_http_request(Provider,OperationId,Source)`` | **Mode and number of proofs:** | ``validate_http_request(+object_identifier,+atom,++compound)`` - ``zero_or_one`` ------------ .. index:: validate_http_request/4 .. _open_api/0::validate_http_request/4: ``validate_http_request/4`` ^^^^^^^^^^^^^^^^^^^^^^^^^^^ Parses an HTTP request wire source using the ``http_core`` library and validates the resulting normalized request against the provider operation descriptor identified by the given ``operationId``. | **Compilation flags:** | ``static`` | **Template:** | ``validate_http_request(Provider,OperationId,Source,Errors)`` | **Mode and number of proofs:** | ``validate_http_request(+object_identifier,+atom,++compound,--list)`` - ``one`` ------------ .. index:: validate_response/3 .. _open_api/0::validate_response/3: ``validate_response/3`` ^^^^^^^^^^^^^^^^^^^^^^^ Succeeds when the given normalized HTTP response term or object implementing the ``http_response_protocol`` protocol conforms to the provider operation descriptor identified by the given ``operationId``. | **Compilation flags:** | ``static`` | **Template:** | ``validate_response(Provider,OperationId,Response)`` | **Mode and number of proofs:** | ``validate_response(+object_identifier,+atom,++term)`` - ``zero_or_one`` ------------ .. index:: validate_response/4 .. _open_api/0::validate_response/4: ``validate_response/4`` ^^^^^^^^^^^^^^^^^^^^^^^ Validates a normalized HTTP response term or an object implementing the ``http_response_protocol`` protocol against the provider operation descriptor identified by the given ``operationId`` and returns any contract errors. | **Compilation flags:** | ``static`` | **Template:** | ``validate_response(Provider,OperationId,Response,Errors)`` | **Mode and number of proofs:** | ``validate_response(+object_identifier,+atom,++term,--list)`` - ``one`` ------------ .. index:: validate_http_response/3 .. _open_api/0::validate_http_response/3: ``validate_http_response/3`` ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Succeeds when an HTTP response wire source parsed by the ``http_core`` library conforms to the provider operation descriptor identified by the given ``operationId``. | **Compilation flags:** | ``static`` | **Template:** | ``validate_http_response(Provider,OperationId,Source)`` | **Mode and number of proofs:** | ``validate_http_response(+object_identifier,+atom,++compound)`` - ``zero_or_one`` ------------ .. index:: validate_http_response/4 .. _open_api/0::validate_http_response/4: ``validate_http_response/4`` ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Parses an HTTP response wire source using the ``http_core`` library and validates the resulting normalized response against the provider operation descriptor identified by the given ``operationId``. | **Compilation flags:** | ``static`` | **Template:** | ``validate_http_response(Provider,OperationId,Source,Errors)`` | **Mode and number of proofs:** | ``validate_http_response(+object_identifier,+atom,++compound,--list)`` - ``one`` ------------ .. index:: json_media_descriptor/2 .. _open_api/0::json_media_descriptor/2: ``json_media_descriptor/2`` ^^^^^^^^^^^^^^^^^^^^^^^^^^^ Constructs an OpenAPI JSON media descriptor using the default ``application/json`` media type. | **Compilation flags:** | ``static`` | **Template:** | ``json_media_descriptor(Schema,MediaDescriptor)`` | **Mode and number of proofs:** | ``json_media_descriptor(++term,-compound)`` - ``one_or_error`` | **Exceptions:** | ``Schema`` is a variable: | ``instantiation_error`` | ``Schema`` is neither a boolean schema nor a JSON object schema term nor a ``schema_ref/1`` term: | ``domain_error(open_api_json_schema_term,Schema)`` ------------ .. index:: json_media_descriptor/3 .. _open_api/0::json_media_descriptor/3: ``json_media_descriptor/3`` ^^^^^^^^^^^^^^^^^^^^^^^^^^^ Constructs an OpenAPI JSON media descriptor using the given media type. | **Compilation flags:** | ``static`` | **Template:** | ``json_media_descriptor(MediaType,Schema,MediaDescriptor)`` | **Mode and number of proofs:** | ``json_media_descriptor(+atom,++term,-compound)`` - ``one_or_error`` | **Exceptions:** | ``MediaType`` is a variable: | ``instantiation_error`` | ``MediaType`` is neither a variable nor a JSON-compatible HTTP media type atom: | ``domain_error(open_api_media_type,MediaType)`` | ``Schema`` is a variable: | ``instantiation_error`` | ``Schema`` is neither a boolean schema nor a JSON object schema term nor a ``schema_ref/1`` term: | ``domain_error(open_api_json_schema_term,Schema)`` ------------ .. index:: json_request_body_descriptor/4 .. _open_api/0::json_request_body_descriptor/4: ``json_request_body_descriptor/4`` ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Constructs an OpenAPI request-body descriptor using the default ``application/json`` media type. | **Compilation flags:** | ``static`` | **Template:** | ``json_request_body_descriptor(Description,Required,Schema,RequestBody)`` | **Mode and number of proofs:** | ``json_request_body_descriptor(+atom,+boolean,++term,-compound)`` - ``one_or_error`` | **Exceptions:** | ``Description`` is a variable: | ``instantiation_error`` | ``Description`` is neither a variable nor an atom: | ``domain_error(open_api_description,Description)`` | ``Required`` is a variable: | ``instantiation_error`` | ``Required`` is neither a variable nor a boolean: | ``domain_error(open_api_boolean,Required)`` | ``Schema`` is a variable: | ``instantiation_error`` | ``Schema`` is neither a boolean schema nor a JSON object schema term nor a ``schema_ref/1`` term: | ``domain_error(open_api_json_schema_term,Schema)`` ------------ .. index:: json_request_body_descriptor/5 .. _open_api/0::json_request_body_descriptor/5: ``json_request_body_descriptor/5`` ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Constructs an OpenAPI request-body descriptor using the given media type. | **Compilation flags:** | ``static`` | **Template:** | ``json_request_body_descriptor(MediaType,Description,Required,Schema,RequestBody)`` | **Mode and number of proofs:** | ``json_request_body_descriptor(+atom,+atom,+boolean,++term,-compound)`` - ``one_or_error`` | **Exceptions:** | ``MediaType`` is a variable: | ``instantiation_error`` | ``MediaType`` is neither a variable nor a JSON-compatible HTTP media type atom: | ``domain_error(open_api_media_type,MediaType)`` | ``Description`` is a variable: | ``instantiation_error`` | ``Description`` is neither a variable nor an atom: | ``domain_error(open_api_description,Description)`` | ``Required`` is a variable: | ``instantiation_error`` | ``Required`` is neither a variable nor a boolean: | ``domain_error(open_api_boolean,Required)`` | ``Schema`` is a variable: | ``instantiation_error`` | ``Schema`` is neither a boolean schema nor a JSON object schema term nor a ``schema_ref/1`` term: | ``domain_error(open_api_json_schema_term,Schema)`` ------------ .. index:: json_response_descriptor/4 .. _open_api/0::json_response_descriptor/4: ``json_response_descriptor/4`` ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Constructs an OpenAPI response descriptor using the default ``application/json`` media type. | **Compilation flags:** | ``static`` | **Template:** | ``json_response_descriptor(Status,Description,Schema,ResponseDescriptor)`` | **Mode and number of proofs:** | ``json_response_descriptor(++term,+atom,++term,-compound)`` - ``one_or_error`` | **Exceptions:** | ``Status`` is a variable: | ``instantiation_error`` | ``Status`` is neither a variable nor ``default`` nor an integer in the ``100..599`` range nor a wildcard status atom such as ``'2XX'``: | ``domain_error(open_api_response_status,Status)`` | ``Description`` is a variable: | ``instantiation_error`` | ``Description`` is neither a variable nor an atom: | ``domain_error(open_api_description,Description)`` | ``Schema`` is a variable: | ``instantiation_error`` | ``Schema`` is neither a boolean schema nor a JSON object schema term nor a ``schema_ref/1`` term: | ``domain_error(open_api_json_schema_term,Schema)`` ------------ .. index:: json_response_descriptor/5 .. _open_api/0::json_response_descriptor/5: ``json_response_descriptor/5`` ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Constructs an OpenAPI response descriptor using the given media type. | **Compilation flags:** | ``static`` | **Template:** | ``json_response_descriptor(Status,Description,MediaType,Schema,ResponseDescriptor)`` | **Mode and number of proofs:** | ``json_response_descriptor(++term,+atom,+atom,++term,-compound)`` - ``one_or_error`` | **Exceptions:** | ``Status`` is a variable: | ``instantiation_error`` | ``Status`` is neither a variable nor ``default`` nor an integer in the ``100..599`` range nor a wildcard status atom such as ``'2XX'``: | ``domain_error(open_api_response_status,Status)`` | ``Description`` is a variable: | ``instantiation_error`` | ``Description`` is neither a variable nor an atom: | ``domain_error(open_api_description,Description)`` | ``MediaType`` is a variable: | ``instantiation_error`` | ``MediaType`` is neither a variable nor a JSON-compatible HTTP media type atom: | ``domain_error(open_api_media_type,MediaType)`` | ``Schema`` is a variable: | ``instantiation_error`` | ``Schema`` is neither a boolean schema nor a JSON object schema term nor a ``schema_ref/1`` term: | ``domain_error(open_api_json_schema_term,Schema)`` ------------ .. index:: problem_json_schema/1 .. _open_api/0::problem_json_schema/1: ``problem_json_schema/1`` ^^^^^^^^^^^^^^^^^^^^^^^^^ Returns an inline RFC 7807-compatible JSON schema for problem responses. | **Compilation flags:** | ``static`` | **Template:** | ``problem_json_schema(Schema)`` | **Mode and number of proofs:** | ``problem_json_schema(-term)`` - ``one`` ------------ .. index:: problem_response_descriptor/3 .. _open_api/0::problem_response_descriptor/3: ``problem_response_descriptor/3`` ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Constructs an OpenAPI problem-response descriptor using the ``application/problem+json`` media type and the default problem schema. | **Compilation flags:** | ``static`` | **Template:** | ``problem_response_descriptor(Status,Description,ResponseDescriptor)`` | **Mode and number of proofs:** | ``problem_response_descriptor(++term,+atom,-compound)`` - ``one_or_error`` | **Exceptions:** | ``Status`` is a variable: | ``instantiation_error`` | ``Status`` is neither a variable nor ``default`` nor an integer in the ``100..599`` range nor a wildcard status atom such as ``'2XX'``: | ``domain_error(open_api_response_status,Status)`` | ``Description`` is a variable: | ``instantiation_error`` | ``Description`` is neither a variable nor an atom: | ``domain_error(open_api_description,Description)`` ------------ Protected predicates -------------------- (no local declarations; see entity ancestors if any) Private predicates ------------------ (no local declarations; see entity ancestors if any) Operators --------- (none) .. seealso:: :ref:`json `, :ref:`json_schema `, :ref:`application_protocol `, :ref:`open_api_provider_protocol `