<?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-01" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.30.2 -->
  <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-01"/>
    <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="09"/>
    <area>Applications</area>
    <workgroup>ASDF Working Group</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 61?>
<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 64?>

<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="methods-on-the-api-calls">
      <name>Methods on the API calls</name>
      <t>Sometimes, only calling an API is not enough. For example, in some cases, the API call requires additional actions such as submitting a payload. To handle this dimension on the API calls, the <strong>method</strong> command has been introduced.  This command enables the requested device to understand how to handle the API call, since in the previous example, the API URL has all the information required in the call itself. However, in some cases, the action necessary with the API may need to be specified in a manner that the requested device can understand. The keyword <strong>method</strong> is meant to describe how to handle the API URL and what to expect of it. In some other examples, the <strong>method</strong> could result in an OBSERVE or another type of new action not yet specified, for example, how to address an XR-type application.</t>
      <t>An example could be the use of an LWM2M camera <xref target="lwm2m-cameraObject"/>. To use this model, a payload has to be submitted in the POST method. The following example describes such a translation from one camera API to the LWM2M model.</t>
      <sourcecode type="json"><![CDATA[
{
    "info": {
      "title": "LwM2M Camera Device to Requester dev. Application API mapping"
    },
    "namespace": {
      "sdm": "https://sdm.wide.ad.jp/sdmo/#/",
      "rdf": "http://www.w3.org/1999/02/22-rdf-syntax-ns",
      "oma": "https://onedm.org/ecosystem/oma",
      "dev": "http://traffic-light202125.traffic-center.fi/10340/0/",
      "app": "http://owner.mycar.fi/"
    },
    "defaultNamespace": "dev",
    "map": {
      "#/sdfObject/video/sdfAction/playStream": {
        "cmd:template-href": "http://traffic-light202125.traffic-center.fi/10340/0/101",
        "cmd:method":"POST",
        "description": "Starts the recording of the camera",
        "sdfInputData": {
            "type": "number",
            "const":1
         },
        "sdfRelation": {
            "FeedType": {
            "relType": "rdf:type",
             "target": [
                "dev:#/sdfObject/Camera/sdfAction/Local_Recording_Control",
                "oma:#/sdfObject/10340/101",
                "sdm:playStream"              ]
            }
          }    
      },
      "#/sdfObject/video/sdfAction/StopStream": {
        "cmd:template-href": "http://traffic-light202125.traffic-center.fi/10340/0/101",
        "cmd:method":"POST",
        "description": "Stops the recording of the camera",
        "sdfInputData": {
              "type": "number",
              "const":0
        },
        "sdfRelation": {
          "FeedType": {
          "relType": "rdf:type",
          "target": [
            "dev:#/sdfObject/Camera/sdfAction/Local_Recording_Control",
            "oma:#/sdfObject/10340/101",
            "sdm:stopStream"
          ]
          }
        }
      },
      "#/sdfObject/Camera/sdfProperty/Input-video-stream":{  
        "cmd:template-href": "http://traffic-light202125.traffic-center.fi/10340/0/9",
        "sdfRelation": {
          "FeedType": {
            "relType": "rdf:type",
            "target": [
              "dev:#/sdfObject/Camera/sdfProperty/Recording_Location",
              "sdm:VideoMedia"
            ]
          }
       }
     }
    }
 } 
]]></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>
      </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." surname="Bormann" fullname="Carsten Bormann">
              <organization/>
            </author>
            <author initials="J." surname="Romann" fullname="Jan Romann">
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="lwm2m-cameraObject" target="https://raw.githubusercontent.com/OpenMobileAlliance/lwm2m-registry/prod/10340.xml">
          <front>
            <title>Camera - OMAobjectId: 10340 V1.0</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
      </references>
    </references>
  </back>
  <!-- ##markdown-source:
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
SwAA

-->

</rfc>
