<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.29 (Ruby 3.2.3) -->
<?rfc strict="yes"?>
<?rfc compact="yes"?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ramos-asdf-api-translation-00" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.30.1 -->
  <front>
    <title abbrev="SDF for API translation">Semantic Definition Format (SDF) for API translation</title>
    <seriesInfo name="Internet-Draft" value="draft-ramos-asdf-api-translation-00"/>
    <author initials="E." surname="Ramos" fullname="Edgar Ramos">
      <organization>Ericsson</organization>
      <address>
        <postal>
          <street>Hirsalantie 11</street>
          <city>02420 Jorvas, Kirkkonummi</city>
          <country>Finland</country>
        </postal>
        <email>edgar.ramos@ericsson.com</email>
      </address>
    </author>
    <date year="2025" month="September" day="04"/>
    <area>Applications</area>
    <workgroup>ASDF Working Group</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 51?>
<t>This document defines an extension to the Semantic Definition Format (SDF) that enables API translation between applications and devices. The translation enables clarification of complex syntax for a service or device to utilize a different API from the one that was first designed to use.</t>
    </abstract>
  </front>
  <middle>
    <?line 54?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>In many cases, a service needed by an application can be provided through APIs by several suppliers. Semantic matching can be used to map the needs of the applications and adapt API calls to what the service suppliers could provide. The main purpose of this document is to describe methods that enable the translation of one device or application API to another equivalent API, utilizing syntax understandable by the deploying party.</t>
      <t>An API translator from the original API to the updated one or even mapping to a new service would allow an automatic adaptation to the target API. Also, it would enable the possibility to adapt to multiple APIs with the same data model, enabling the deployment of services from multiple sources. This feature enables use cases such as the usage of the cheapest or most robust service, deployment of national services when traveling, and execution of device services even from a different ecosystem origin.</t>
      <t>This document provides enabling elements for communication from devices or applications belonging to different ecosystems that do not share the same semantic modelling. Utilizing SDF syntax enhanced with an API format depiction, it is possible to provide an API description that is understandable with the syntax known by the device or application, if such semantics are defined in their data model. The final result uses a navigable description of the API's functions to provide the necessary information that is required by a device application to map external required services, their parameters, and results to an application logic using ontologically defined objects that can be matched to remote calls in another device application, for example.</t>
      <t>The API requires a mapping in applications functions by matching syntax in addition to the actual discovery of the API; therefore, the importance of the translation to an understandable model. This matching could be enabled by several mechanisms described, and it is dynamically adjusted to every new interface faced. Using SDF in conjunction with the given schema allows an automated way to match functionality to application intents.</t>
      <artwork><![CDATA[
┌──────────────────────┐                  ┌──────────────────────┐    
│                      │                  │                      │    
│  Service platform    │                  │  Service platform    │    
│        #1            │                  │        #2            │    
│                      │                  │                      │    
│       ┌──────────────┐                  │       ┌──────────────┐    
│       │ Service API  ┼──┐               │       │ Service API  │    
└───────└─────▲────────┘  │               └───────└─────▲──┬─────┘    
              │           │                             │  │          
              │           │         ┌───────────┐       │  │          
              │           ▼───┐     │ SDF-API   │       │  │          
              └───────────┤   │     │TRANSLATION│       │  │          
                          │   ┼─────►  MODEL    ├───────┘  │          
                          │   ◄─────┐           ◄──────────┘          
                          └───┘     └───────────┘                     
                         Device                                       
]]></artwork>
      <t><strong>Example of a device using the API translation model to access the same service in a different platform with a different API</strong></t>
      <section anchor="terminology">
        <name>Terminology</name>
        <t>The definitions of <xref target="I-D.ietf-asdf-sdf"/> apply.</t>
        <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
   "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and
   "OPTIONAL" in this document is to be interpreted as described in
   [BCP14] (RFC2119) (RFC8174) when, and only when, they appear in all
   capitals, as shown here.</t>
      </section>
    </section>
    <section anchor="discoverable-api-interfaces">
      <name>Discoverable API interfaces</name>
      <t>A device or application may expose its capabilities as an API list. This could be acquired in real-time by calling a command that provides such a list of commands. For example, the resource “.well-known/commands” <xref target="RFC8615"/> could be used as a specific way to request all the commands available. The reply then includes a list of the different API supported calls, which would be called in a hierarchical way from the root domain that is provided by the device, an application, or a mediating platform.
The reply would contain a description of the supported API with a semantic definition attached. Using the Semantic Definition Format (SDF), a reply for two commands may include what is given in the following example:</t>
      <sourcecode type="json"><![CDATA[
{
  "namespace": {
    "name": "Relevant_URL_or_namespace_used_as_semantic_reference_(example)",
    "rdf": "http://www.w3.org/1999/02/22-rdf-syntax-ns",
    "demo": "https://example.com/iss-demo-setup/#",
  },
  "defaultNamespace": "demo",
  "sdfObject": {
    "target_object": {
      "sdfProperty": {
        "target_property": {
          "description": "possible description of the property",
          "sdfRelation": {
            "FeedType": {
              "relType": "rdf:type",
              "target": [
                "demo:Output"
              ]
            }
          },
          "contentFormat": "application/typeofcontent-info"
        }
      },
      "sdfAction": {
        "Name_of_the_command_1": {
          "description": "Description of the command and input required",
          "sdfRelation": {
            "FeedType": {
              "relType": "rdf:type",
              "target": "demo:command1"
            }
          },
          "sdfInputData": {
            "type": "object",
            "properties": {
              "input_1_required": {
                "description": "Description of what element is needed as first input",
                "sdfRelation": {
                  "FeedType": {
                    "relType": "rdf:type",
                    "target": [
                      "demo:input1"                    ]
                  }
                },
                "type": "number",
                "sdfChoice": {
                  "input_2_required": {
                    "description": "A number needed as an input of the command",
                    "const":"0",
                    "sdfRelation": {
                      "FeedType": {
                        "relType": "rdf:type",
                        "target": [
                          "demo":"input2",
                        ]
                      }
                    }
                  }
                }
              }
            }
          },
          "sdfOutputData": {
            "contentFormat": "application/typeofcontent-info"
          }
        },
        "Name_of_the_command_2": {
          "sdfRelation": {
            "FeedType": {
              "relType": "rdf:type",
              "target": "demo:command2"
            }
          },
          "sdfInputData": {
            "description": "Description of input required for second command",
            "sdfRelation": {
              "FeedType": {
                "relType": "rdf:type",
                "target": "demo:secondInput"
              }
            },
            "type": "typeoftheinput",
            "contentFormat": "application/typeofinput-info"
          }
        }
      }
    }
  }
}

]]></sourcecode>
      <t>In this example, one service is defined with a command1, which requires an input1 (an object) and input2 (a number). The other service requires a different call (command2), which requires only one input (secondInput).</t>
      <t>Further interaction capabilities can be included either in the initial response, as shown above in the "sdfAction" block, or could be discovered by further requests. For example, the descriptions of the two actions detailed above show if they require input, what the details of such input and the output are, and if there is additional information related to the nature of the output. Also, the description field could be tailor-made to provide a URI to a vocabulary that is understandable by the device or application. In this way, the device or application could make sense of the possible options, parameters, and actions that the command provides or requires.</t>
    </section>
    <section anchor="inputting-parameters-to-the-api">
      <name>Inputting parameters to the API</name>
      <t>Once the available function calls and input parameters required by the API have been provisioned to the requester device or application, it can make calls to the API when required by its application logic. The application would map the “need for a capability” to the concrete capability provided by the provider application or device through matching the syntax and data model. The functions are then mapped to the calls that the application can handle and has defined syntax. The parts of the API that are not understood by the requester device are normally ignored. The mapping semantics from a target device or application may be communicated to the application of the requesting device using an SDF mapping extension draft <xref target="bormann-mapping"/>. In such mapping, the actions and data can be expressed using the data model that are understandable by the requester and allows it to produce the API call and provide the required data. The only problem with this mapping is that if the API call structure is different, the logic required to call the target API might be complicated for certain device applications.</t>
      <t>With SDF notation, it is possible to explain the data model but not the mapping for a specific API call. That would require, in some cases, mapping of values and, depending on the API definition, reshuffling of the parameters or even the URI utilized.</t>
      <t>To tackle those challenges, we introduced a new SDF quality that can express URL template patterns from <xref target="RFC6570"/>. The quality <strong>"template-href"</strong>, includes the URL or the URL pattern that matches the command known by the requester device application. As explained in <xref target="RFC6570"/>, the pattern may have variable terms, which are also given an SDF definition and relationship so the requested device can understand how to map its own data model to what the target API requires. Also, we introduce a value mapper <strong>"template-value"</strong> that enables mapping of values to parameters in the target API. The <strong>sdfRelation</strong> <xref target="I-D.ietf-asdf-sdf"/> is used as a vehicle to support the mapping between APIs.</t>
      <t>The namespace <strong>"cmd"</strong> is also utilized to provide this API mapping values. 
In this example, we map a command_1 with several inputs to a command_2 that utilizes the inputs in a different way. The schema maps semantically the inputs and instructs the system how to make the API call based on the previously known API.</t>
      <sourcecode type="json"><![CDATA[
  {
 "info":{
    "title": "API mapping of two systems"
  },
  "namespace": {
    "targetSem": "https://example.org/targetSemantics/#",
    "targetDev": "https://example.org/targetDevice",
    "requestDev": "https://example.com/requesterDevice",
    "requestSem": "https://example.com/destinationSemantics/#"
  },
  "defaultNamespace": "requestSem",
  "sdfData": {
    "input_2_required": {
      "type": "number",
      "sdfChoice": {
        "requesterSemantic_1": {
          "const": 1
        },
        "requesterSemantic_2": {
          "const": 2
        }
      },
      "sdfRelation": {
        "FeedType": {
          "relType": "rdf:type",
          "target": [
            "targetDev:#/sdfObject/target_object/sdfAction/Name_of_the_command_1/sdfInputData/input2",
            "requestDev:#/sdfObject/request_object/sdfAction/requester_command/sdfInputData/semanticRequesterInput"
          ]
        }
      }
    }
  },
  "map": {
    "#/sdfObject/request_object/sdfAction/requester_command": {
      "cmd:template-href": "https://example.org/targetDevice/control/Name_of_the_command_1?input1={input_2_required}&input2={input_1}",
      "sdfRelation": {
        "FeedType": {
          "relType": "rdf:type",
          "target": [
            "targetDev:#/sdfObject/target_object/sdfAction/Name_of_the_command_1",
            "requestSem:requester_command"
          ]
        }
      }
    },
    "cmd :template-values": {
      "input2": "#/sdfData/input_1_required",
      "input1": "#/sdfObject/target_object/sdfAction/name_of_command1/sdfInputData/input_1"
    },
    "#/sdfObject/request_object/sdfAction/requester_command_2": {
      "cmd:template-href": "https://example.org/targetDevice/control/Name_of_the_command_2?secondInput={requesterSecondInput}",
      "sdfRelation": {
        "FeedType": {
          "relType": "rdf:type",
          "target": "targetDev:#/sdfObject/target_object/sdfAction/Name_of_the_command_2"
        }
      }
    },
    "cmd:template-values": {
      "secondInput": "#/sdfObject/request_object/sdfAction/requester_command_2/sdfInputData/requesterSecondInput"
    }
  }
}
]]></sourcecode>
    </section>
    <section anchor="matching-api-to-application-logic">
      <name>Matching API to application logic</name>
      <t>Each application has a logic that requires either information from the API call or the execution of a service. With this translation tool, the application logic may need to consider the different types of APIs that may be present. For example, if the API requires a payload or the info is directly appended to the call. Also, on the way the API produces the output, and how to handle it.</t>
    </section>
    <section anchor="iana">
      <name>IANA Considerations</name>
      <t>This document has the following actions for IANA.</t>
      <t>Note to RFC Editor: Please replace all occurrences of "{XXXX}" with the RFC number of this specification and delete this paragraph.</t>
      <section anchor="media-type">
        <name>Media Type</name>
        <t>IANA is requested to add the following Media-Type to the "Media Types registry <xref target="IANA.media-types"/>. --&gt;</t>
        <table align="left" anchor="new-media-type">
          <name>A media type for SDF mapping files</name>
          <thead>
            <tr>
              <th align="left">Name</th>
              <th align="left">Template</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">sdf-mapping+json</td>
              <td align="left">application/ sdf-mapping+json</td>
              <td align="left">RFC XXXX, section 5.1</td>
            </tr>
          </tbody>
        </table>
        <t>Type name:  application
   Subtype name:  sdf-mapping+json
   Required parameters:  none
   Optional parameters:  none
   Encoding considerations:  binary (JSON is UTF-8-encoded text)
   Security considerations:  Section 6 of RFC XXXX
   Interoperability considerations:  none
   Published specification:  Section 5.1 of RFC XXXX
   Applications that use this media type:  Tools for data and
      interaction modeling that describes Things, i.e., physical objects
      that are available for interaction over a network
   Fragment identifier considerations:  A JSON Pointer fragment
      identifier may be used, as defined in Section 6 of [RFC6901].
   Person &amp; email address to contact for further information:  ASDF WG
      mailing list (asdf@ietf.org), or IETF Applications and Real-Time
      Area (art@ietf.org)
   Intended usage:  COMMON
   Restrictions on usage:  none
   Author/Change controller:  IETF
   Provisional registration:  no</t>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>Some wider issues are discussed in [RFC8576].</t>
    </section>
    <section anchor="acknowledgements">
      <name>Acknowledgements</name>
      <t>Thanks to Ari Keränen for the support in realizing this idea.</t>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="I-D.ietf-asdf-sdf">
          <front>
            <title>Semantic Definition Format (SDF) for Data and Interactions of Things</title>
            <author fullname="Michael Koster" initials="M." surname="Koster">
              <organization>KTC Control AB</organization>
            </author>
            <author fullname="Carsten Bormann" initials="C." surname="Bormann">
              <organization>Universität Bremen TZI</organization>
            </author>
            <author fullname="Ari Keränen" initials="A." surname="Keränen">
              <organization>Ericsson</organization>
            </author>
            <date day="27" month="July" year="2025"/>
            <abstract>
              <t>   The Semantic Definition Format (SDF) is concerned with Things, namely
   physical objects that are available for interaction over a network.
   SDF is a format for domain experts to use in the creation and
   maintenance of data and interaction models that describe Things.  An
   SDF specification describes definitions of SDF Objects/SDF Things and
   their associated interactions (Events, Actions, Properties), as well
   as the Data types for the information exchanged in those
   interactions.  Tools convert this format to database formats and
   other serializations as needed.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-asdf-sdf-24"/>
        </reference>
        <reference anchor="RFC7396">
          <front>
            <title>JSON Merge Patch</title>
            <author fullname="P. Hoffman" initials="P." surname="Hoffman"/>
            <author fullname="J. Snell" initials="J." surname="Snell"/>
            <date month="October" year="2014"/>
            <abstract>
              <t>This specification defines the JSON merge patch format and processing rules. The merge patch format is primarily intended for use with the HTTP PATCH method as a means of describing a set of modifications to a target resource's content.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7396"/>
          <seriesInfo name="DOI" value="10.17487/RFC7396"/>
        </reference>
        <reference anchor="IANA.media-types" target="https://www.iana.org/assignments/media-types">
          <front>
            <title>Media Types</title>
            <author>
              <organization>IANA</organization>
            </author>
          </front>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="RFC8615">
          <front>
            <title>Well-Known Uniform Resource Identifiers (URIs)</title>
            <author fullname="M. Nottingham" initials="M." surname="Nottingham"/>
            <date month="May" year="2019"/>
            <abstract>
              <t>This memo defines a path prefix for "well-known locations", "/.well-known/", in selected Uniform Resource Identifier (URI) schemes.</t>
              <t>In doing so, it obsoletes RFC 5785 and updates the URI schemes defined in RFC 7230 to reserve that space. It also updates RFC 7595 to track URI schemes that support well-known URIs in their registry.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8615"/>
          <seriesInfo name="DOI" value="10.17487/RFC8615"/>
        </reference>
        <reference anchor="RFC6570">
          <front>
            <title>URI Template</title>
            <author fullname="J. Gregorio" initials="J." surname="Gregorio"/>
            <author fullname="R. Fielding" initials="R." surname="Fielding"/>
            <author fullname="M. Hadley" initials="M." surname="Hadley"/>
            <author fullname="M. Nottingham" initials="M." surname="Nottingham"/>
            <author fullname="D. Orchard" initials="D." surname="Orchard"/>
            <date month="March" year="2012"/>
            <abstract>
              <t>A URI Template is a compact sequence of characters for describing a range of Uniform Resource Identifiers through variable expansion. This specification defines the URI Template syntax and the process for expanding a URI Template into a URI reference, along with guidelines for the use of URI Templates on the Internet. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6570"/>
          <seriesInfo name="DOI" value="10.17487/RFC6570"/>
        </reference>
        <reference anchor="bormann-mapping" target="https://datatracker.ietf.org/doc/draft-bormann-asdf-sdf-mapping/">
          <front>
            <title>Semantic Definition Format (SDF): Mapping files</title>
            <author initials="C. B. and J." surname="Romann" fullname="Carsten Bormann and Jan Romann">
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
      </references>
    </references>
  </back>
  <!-- ##markdown-source:
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

-->

</rfc>
