<?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-sdf-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-sdf-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="02"/>
    <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>
