Network Working Group J. Michaud Internet-Draft February 8, 2025 Intended status: Informational Expires: August 12, 2025 Hypertext Command Line Interface draft-michaud-hcli-00 Abstract This document proposes a codification of resources and their relations with hyperlinks, using Unix-like command line interface (CLI) semantics, to foster the creation of a reusable and prolific intersection between the REST architectural style and the pipe and filter style. Status of This Memo This Internet-Draft is submitted in full conformance with the provisions of BCP 78 and BCP 79. Internet-Drafts are working documents of the Internet Engineering Task Force (IETF). Note that other groups may also distribute working documents as Internet-Drafts. The list of current Internet- Drafts is at http://datatracker.ietf.org/drafts/current/. Internet-Drafts are draft documents valid for a maximum of six months and may be updated, replaced, or obsoleted by other documents at any time. It is inappropriate to use Internet-Drafts as reference material or to cite them other than as "work in progress." Copyright Notice Copyright (c) 2025 IETF Trust and the persons identified as the document authors. All rights reserved. This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (http://trustee.ietf.org/license-info) in effect on the date of publication of this document. Please review these documents carefully, as they describe your rights and restrictions with respect to this document. Code Components extracted from this document must include Simplified BSD License text as described in Section 4.e of the Trust Legal Provisions and are provided without warranty as described in the Simplified BSD License. Michaud Expires August 12, 2025 [Page 1] Internet-Draft Hypertext Command Line Interface February 8, 2025 Table of Contents 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 3 2. Requirements . . . . . . . . . . . . . . . . . . . . . . . . . 3 3. HCLI ALPS Semantics . . . . . . . . . . . . . . . . . . . . . 4 4. HCLI Document . . . . . . . . . . . . . . . . . . . . . . . . 5 4.1. Reserved Property and Other Reserved Names . . . . . . . . 6 4.1.1. hcli_version . . . . . . . . . . . . . . . . . . . . . 6 4.1.2. Other Reserved Names . . . . . . . . . . . . . . . . . 7 4.2. name . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 4.3. section . . . . . . . . . . . . . . . . . . . . . . . . . 7 4.3.1. name . . . . . . . . . . . . . . . . . . . . . . . . . 7 4.3.2. description . . . . . . . . . . . . . . . . . . . . . 8 4.4. Command . . . . . . . . . . . . . . . . . . . . . . . . . 8 4.4.1. name . . . . . . . . . . . . . . . . . . . . . . . . . 8 4.4.2. description . . . . . . . . . . . . . . . . . . . . . 9 4.5. Option . . . . . . . . . . . . . . . . . . . . . . . . . . 9 4.5.1. name . . . . . . . . . . . . . . . . . . . . . . . . . 9 4.5.2. description . . . . . . . . . . . . . . . . . . . . . 10 4.6. Parameter . . . . . . . . . . . . . . . . . . . . . . . . 10 4.7. Execution . . . . . . . . . . . . . . . . . . . . . . . . 11 4.7.1 command . . . . . . . . . . . . . . . . . . . . . . . . 11 4.7.2 http . . . . . . . . . . . . . . . . . . . . . . . . . 11 4.7.2.1 HTTP Protocol . . . . . . . . . . . . . . . . . . . 11 5. Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 5.1 usp5 . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 5.2 jsonf . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 6. Stream Processing . . . . . . . . . . . . . . . . . . . . . . 17 6.1.1. For Servers . . . . . . . . . . . . . . . . . . . . . 17 6.1.2. For Clients in General . . . . . . . . . . . . . . . . 18 6.1.2. For Command Line Clients . . . . . . . . . . . . . . . 18 7. Recommendations . . . . . . . . . . . . . . . . . . . . . . . 18 7.1. Standard HCLI ALPS Profile . . . . . . . . . . . . . . . . 19 7.2. For Clients in General . . . . . . . . . . . . . . . . . . 19 7.2.1. Command Line Execution . . . . . . . . . . . . . . . . 19 7.2.2. Documentation . . . . . . . . . . . . . . . . . . . . 19 7.2.3. Robustness . . . . . . . . . . . . . . . . . . . . . . 19 7.3. For Command Line Clients (e.g. Under Unix/Linux shell) . . 20 7.3.1. Documentation . . . . . . . . . . . . . . . . . . . . 20 8. Security Considerations . . . . . . . . . . . . . . . . . . . 20 9. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 20 10. References . . . . . . . . . . . . . . . . . . . . . . . . . 20 10.1. Normative References . . . . . . . . . . . . . . . . . . 20 10.2. Informative References . . . . . . . . . . . . . . . . . 21 Appendix A. Acknowledgements . . . . . . . . . . . . . . . . . . 21 Appendix B. Frequently Asked Questions . . . . . . . . . . . . . 22 B.1. What are some of the benefits of HCLI? . . . . . . . . . . 22 B.1.1. Reduced Cost . . . . . . . . . . . . . . . . . . . . . 22 Michaud Expires August 12, 2025 [Page 2] Internet-Draft Hypertext Command Line Interface February 8, 2025 B.1.2. Self-documenting and Up-to-date . . . . . . . . . . . 22 B.1.3. Immediacy . . . . . . . . . . . . . . . . . . . . . . 22 B.1.4. Scripting and Experimentation . . . . . . . . . . . . 22 B.1.5. Building Blocks . . . . . . . . . . . . . . . . . . . 22 B.1.5. Native . . . . . . . . . . . . . . . . . . . . . . . . 22 Author's Address . . . . . . . . . . . . . . . . . . . . . . . . . 23 1. Introduction The proliferation of hypermedia-rich media-types such as HAL, Collection+JSON, Siren, JSON API, JSON-LD, Mason, etc., was a significant step in helping hypermedia APIs take flight in the industry. However, given the generic nature of these hypermedia-rich media types, the establishment of meaning within their structure requires additional work. Semantic definition and agreement between API providers and consumers is required to enable use coherence to emerge. Hypertext Command Line Interface (HCLI) is a standard that establishes semantic conventions for expressing command line interfaces via hypermedia controls, such as through the use of links and forms. HCLI leverages the use of the Application Level Profile Semantics (ALPS) [I-D.draft-amundsen-richardson-foster-alps], similar to microformats, to establish a shared understanding and meaning within generic hypermedia-rich media-types. HCLI's conventions result in a semantic interface, a connector, for serving and consuming CLIs, enabling for the creation of general- purpose libraries and clients that can be re-used. The establishment of a semantic interface of this nature lays down a foundation for the instigation of a rich ecosystem of reusable and shareable CLIs. The primary design goal of HCLI is to foster the creation of a reusable and prolific intersection, or bridge, between the REST architectural style and the pipe and filter style; as the latter is seen under the Unix/Linux shell. HCLI can be applied to any domain, and only imposes limitations that constrain an HTTP API to operate as a hypertext command line interface. 2. Requirements The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in [RFC2119]. Michaud Expires August 12, 2025 [Page 3] Internet-Draft Hypertext Command Line Interface February 8, 2025 3. HCLI ALPS Semantics The HCLI semantics are largely codified via the definition of a proposed standard ALPS profile [I-D.draft-amundsen-richardson-foster- alps], and takes the following form: Hypertext Command Line Interface (HCLI) semantics. A resource for providing HCLI argument choices A resource for describing and selecting a command. A resource for describing and selecting an option. A resource for providing an input parameter. A form to input a command line parameter. Michaud Expires August 12, 2025 [Page 4] Internet-Draft Hypertext Command Line Interface February 8, 2025 A resource for executing a command line. The version of the HCLI specification in use The name of the described command or option The description of a named section, command, or option A man page style HCLI documentation section. A protocol hint of the default method to use when executing an HCLI. 4. HCLI Document An HCLI Document, or any document containing HCLI semantics, MAY be represented using any media-type that is able to express the HCLI semantics described via the proposed ALPS profile and the provisions otherwise mentioned in this specification. Michaud Expires August 12, 2025 [Page 5] Internet-Draft Hypertext Command Line Interface February 8, 2025 It should also be noted that an HCLI Document MUST NOT endeavor to expose the entirety of a command line interface in a single HCLI Document. HCLI serving MUST be represented incrementally and across multiple HCLI Documents as each layer of commands, options and parameters unfold through linked navigation. An HCLI Document MUST always contain at least one of the following: (1) Command (2) Option (3) Parameter (4) Execution The "hcli_" prefix is reserved by the HCLI specification and MUST NOT be used by API creators to define private semantics. This specification makes use of one reserved property and one reserved URI Template [RFC6570] Parameter name, using the "hcli_" prefix: (1) "hcli_version": The version of this HCLI specification. (2) "hcli_param": The Parameter name to submit in a URI Template. Additionally, this specification reserves the following names for exclusive use by HCLI clients: (1) "options" : A reserved section name (2) "commands" : A reserved section name (3) "help": A reserved Command name 4.1. Reserved Property and Other Reserved Names 4.1.1. hcli_version The reserved "hcli_version" property is REQUIRED. This property MUST be present in all HCLI Resources and MUST contain the version number of the applicable HCLI specification. Michaud Expires August 12, 2025 [Page 6] Internet-Draft Hypertext Command Line Interface February 8, 2025 This specification documents the semantics of HCLI version "1.0". 4.1.2. Other Reserved Names Other reserved names, mentioned in [Section 4. HCLI Document], and related provisions are covered in sections further below, where they can be better contextualized. 4.2. name The "name" property is REQUIRED. The name property contains the name of the Command described by the HCLI Document. 4.3. section The "section" property is REQUIRED. A section contains documentation used by users to interact with an HCLI. Given the primary goal of HCLI, mentioned in the introduction, the sections SHOULD take a form akin to Unix/Linux style man pages and MUST minimally make use of the following named sections: (1) name (2) synopsis (3) description (4) examples The purpose and content of each section SHOULD adhere to Unix/Linux man page conventions and the first three sections MUST be in the exact sequence mentioned above. Other sections MAY be in any order. Two section names are reserved for automatic documentation generation by HCLI clients and MUST NOT be used in HCLI Documents: (1) options (2) commands 4.3.1. name The "name" property is REQUIRED. Its value SHOULD be the name of a documentation section. Michaud Expires August 12, 2025 [Page 7] Internet-Draft Hypertext Command Line Interface February 8, 2025 4.3.2. description The "description" property is REQUIRED. Its value SHOULD contain information that pertains to the purpose of the named section. 4.4. Command Command is OPTIONAL. A Command describes a type of action to effect in a command line execution. A Command MUST only be made available if contextually relevant, for a given HCLI Document, in the cumulative formation of a command line sequence. Specific contextual relevance determination is, however, out of scope of this specification. Because many Commands and Options MAY be presented in an HCLI Document, individual Command "cli" links presented in an HCLI Document SHOULD be disambiguated, if possible, by using a secondary key containing the name of the Command. Successful traversal, by an HCLI client, of a the "cli" link relation in a Command, SHOULD return an HCLI Document describing the targeted Command's context. 4.4.1. name The "name" property is REQUIRED. Its value SHOULD be the name of the Command (e.g. "s3" in "aws s3"). By convention, and to help human actors differentiate Options from Commands, Command names SHOULD NOT be prefixed with a: (1) single dash character (i.e. "-") (2) two consecutive dash characters (i.e. "--"). Furthermore, to make it easier for HCLI clients to differentiate between Parameters, Commands and Options, the name value SHOULD NOT make use of the: (1) single quote character (i.e. ') Michaud Expires August 12, 2025 [Page 8] Internet-Draft Hypertext Command Line Interface February 8, 2025 (2) double quote character (i.e. ") (3) back tick character (i.e. `) The "help" Command name is reserved for use by clients and MUST NOT be presented as a valid Command to use. 4.4.2. description The "description" property is REQUIRED. Its value SHOULD contain information that describes the purpose of the Command. 4.5. Option Option is OPTIONAL. An Option describes an option or flag that MAY be used to effect a variation on the outcome of a command line execution. An Option MUST only be made available if contextually relevant, for a given HCLI Document, in the cumulative formation of a command line sequence. Specific contextual relevance determination is, however, out of scope of this specification. Successful traversal, by an HCLI client, of a "cli" link relation in an Option SHOULD return an HCLI Document that correlates to the last successfully navigated Command. Options MUST NOT present documentation distinct from that of it's associated Command. Because many Commands and Options MAY be presented in an HCLI Document, individual Option "cli" links presented in an HCLI Document SHOULD be disambiguated, if possible, by using a secondary key containing the name of the Option. The "cli" link relation contained in an Option that has already been navigated through by an HCLI client MUST NOT be presented any longer. The Option itself, however, MUST otherwise remain available in an HCLI Document to help HCLI clients with automatic documentation generation. 4.5.1. name The "name" property is REQUIRED. By convention, and to help human actors differentiate between Options Michaud Expires August 12, 2025 [Page 9] Internet-Draft Hypertext Command Line Interface February 8, 2025 and Commands, Option names SHOULD be prefixed with a: (1) single dash character (i.e. "-") (2) two consecutive dash characters (i.e. "--"). To make it easier for clients to differentiate between Parameters, Commands and Options, the name value SHOULD NOT make use of the: (1) single quote character (i.e. ') (2) double quote character (i.e. ") (3) back tick character (i.e. `) 4.5.2. description The "description" property is REQUIRED. Its value SHOULD contain information that describes the purpose of the Option, and how to use it. 4.6. Parameter Parameter is OPTIONAL. A Parameter describes an HCLI client's ability to input a single user supplied parameter, using the reserved "hcli_param" key. The "hcli_param" key is used as a simple string expansion variable in a URI Template (see section 3.2.2 of [RFC6570]), that MAY be required for successful command line execution. A submitted expansion variable MUST be URL encoded [RFC3986]. A Parameter MUST only be made available if contextually relevant, for a given HCLI Document, in the cumulative formation of a command line sequence. Specific contextual relevance determination is, however, out of scope of this specification. Successful traversal, by an HCLI client, of the "cli" link relation contained in a Parameter, SHOULD return an HCLI Document that correlates to the last successfully navigated Command. Parameters MUST NOT present documentation distinct from that of it's associated Command. An HCLI Document MUST NOT contain more than a single Parameter at a time but more than one Parameter MAY be presented sequentially across HCLI Documents. Michaud Expires August 12, 2025 [Page 10] Internet-Draft Hypertext Command Line Interface February 8, 2025 4.7. Execution Execution is OPTIONAL. Execution identifies an HCLI client's ability to execute a theretofore accumulated command line. Execution MUST only be made available if contextually relevant, for a given HCLI Document and an accumulated command line sequence. Specific contextual relevance determination is, however, out of scope of this specification. Successful traversal, by an HCLI client, of the "cli" link relation contained in Execution, MUST NOT return an HCLI Document and effectively steps out of scope of HCLI semantics. API provider semantics are also out of scope of this specification. 4.7.1 command The command property is REQUIRED. The command property MUST contain a summary of the theretofore accumulated command line sequence. 4.7.2 http The http property is REQUIRED. The http property MUST provides a protocol hint of the default HTTP method to automatically use by HCLI clients when navigating through the final "cli" link relation leading into API provider specific semantics. Note that only a single default value is allowed. The default value MUST align with one of the allowed methods for the resource referenced through the "cli" link relation. 4.7.2.1 HTTP Protocol For the HTTP protocol, the allowed method values are: (1) for a safe "cli" link transition - get (2) for an unsafe, idempotent "cli" link transition - put Michaud Expires August 12, 2025 [Page 11] Internet-Draft Hypertext Command Line Interface February 8, 2025 - delete (3) for an unsafe, non-idempotent "cli" link transition - post - patch 5. Examples 5.1 usp5 Here's an example of a hypothetical "usp5" hypertext command line interface represented as hal+json [I-D.draft-kelly-json-hal] and navigating us through a request for the CLI's version number: GET /usp5 HTTP/1.1 Host: example.org Accept: application/hal+json HTTP/1.1 200 OK Content-Type: application/hal+json { "_links": { "self": { "href": "/usp5" }, "profile": { "href": "http://example.org/profiles/hcli#hcli-document" }, "cli": [ { "href": "/usp5/__cdef/admin?command=usp5", "profile": "href": "http://example.org/profiles/hcli#command" "name": "admin" }, { "href": "/usp5/__cdef/admin?command=usp5+--version", "profile": "href": "http://example.org/profiles/hcli#option" "name": "--version" } ] }, "hcli_version": "1.0", "name": "usp5", "section" : [ Michaud Expires August 12, 2025 [Page 12] Internet-Draft Hypertext Command Line Interface February 8, 2025 { "name": "name", "description": "usp5" }, { "name": "synopsis", "description": "usp5 [option] [parameters]" }, { "name": "description", "description": "The usp5 CLI is a tool used to manipulate udp session manager protocol (usp5) users and credentials." }, { "name": "examples", "description": "N/A" }] } GET /usp5/__odef/--version?command=usp5 HTTP/1.1 Host: example.org Accept: application/hal+json HTTP/1.1 200 OK Content-Type: application/hal+json { "_links": { "self": { "href": "/usp5/__odef/--version?command=usp5" }, "profile": { "href": "http://example.org/profiles/hcli#option" }, "cli": { "href": "/usp5?command=usp5+--version", "profile": "http://example.org/profiles/hcli#hcli-document" } }, "hcli_version": "1.0", "name": "--version", "description": "The usp5 CLI version." } GET /usp5?command=usp5+--version HTTP/1.1 Host: example.org Accept: application/hal+json HTTP/1.1 200 OK Content-Type: application/hal+json Michaud Expires August 12, 2025 [Page 13] Internet-Draft Hypertext Command Line Interface February 8, 2025 { "_links": { "self": { "href": "/usp5?command=usp5+--version" }, "profile": { "href": "http://example.org/profiles/hcli#hcli-document" }, "cli": [ { "href": "/usp5/__cdef/admin?command=usp5+--version", "profile": "href": "http://example.org/profiles/hcli#command" "name": "admin" }, { "href": "/usp5/__cdef/admin?command=usp5+--version", "profile": "href": "http://example.org/profiles/hcli#option" "name": "--version" }, { "href": "/usp5/__edef?command=usp5+--version", "profile": "href": "http://example.org/profiles/hcli#execution" } ] }, "hcli_version": "1.0" "name": "--version", "section" : [ { "name": "name", "description": "usp5" }, { "name": "synopsis", "description": "usp5 [option] [parameters]" }, { "name": "description", "description": "The usp5 CLI is a tool used to manipulate udp session manager protocol (usp5) users and credentials." }, { "name": "examples", "description": "N/A" }] } GET /usp5/__edef?command=usp5+--version HTTP/1.1 Host: example.org Michaud Expires August 12, 2025 [Page 14] Internet-Draft Hypertext Command Line Interface February 8, 2025 Accept: application/hal+json HTTP/1.1 200 OK Content-Type: application/hal+json { "_links": { "self": { "href": "/usp5/__edef?command=usp5+--version" }, "profile": { "href": "http://example.org/profiles/hcli#execution" }, "cli": { "href": "/usp5/execution?command=usp5+--version", } }, "hcli_version": "1.0", "command": "usp5 --version", "http": "get" } GET /usp5/execution?command=usp5+--version HTTP/1.1 Host: example.org Accept: application/octet-stream HTTP/1.1 200 OK Content-Type: application/octet-stream 0.0.1 5.2 jsonf Here's an example of a hypothetical "jsonf" hypertext command line interface represented as hal+json [I-D.draft-kelly-json-hal] that takes a JSON input stream and attempts to reformat it to enhance human readability: GET /jsonf HTTP/1.1 Host: example.org Accept: application/hal+json HTTP/1.1 200 OK Content-Type: application/hal+json { "_links": { "self": { Michaud Expires August 12, 2025 [Page 15] Internet-Draft Hypertext Command Line Interface February 8, 2025 "href": "/jsonf?command=jsonf" }, "profile": { "href": "http://example.org/profiles/hcli#hcli-document" }, "cli": [ { "href": "/jsonf/__edef?command=jsonf", "profile": "href": "http://example.org/profiles/hcli#execution" } ] }, "hcli_version": "1.0" "name": "jsonf", "section" : [ { "name": "name", "description": "jsonf" }, { "name": "synopsis", "description": "jsonf" }, { "name": "description", "description": "The jsonf CLI formats JSON documents." }, { "name": "examples", "description": "cat linear.json | jsonf" }] } GET /jsonf/__edef?command=jsonf HTTP/1.1 Host: example.org Accept: application/hal+json HTTP/1.1 200 OK Content-Type: application/hal+json { "_links": { "self": { "href": "/jsonf/__edef?command=jsonf" }, "profile": { "href": "http://example.org/profiles/hcli#execution" }, Michaud Expires August 12, 2025 [Page 16] Internet-Draft Hypertext Command Line Interface February 8, 2025 "cli": { "href": "/jsonf/execution?command=jsonf", } }, "hcli_version": "1.0", "command": "jsonf go", "http": "post" } POST /jsonf/execution?command=jsonf HTTP/1.1 Host: example.org Content-Type: application/json Accept: */* {"linear":"and","hard":"to","read":"json"} HTTP/1.1 200 OK Content-Type: application/json { "linear" : "and", "hard" : "to", "read" : "json" } 6. Stream Processing 6.1.1. For Servers Servers implementing HCLI semantics that leverage unsafe Execution (HTTP POST or HTTP PATCH) and that intend to allow input stream-like processing for their HCLI, for example, by receiving an STDIN input stream through a filter from a pipe and filter sequence in a Unix/Linux shell, MUST minimally be ready to receive and send entity bodies of the application/octet-stream media-type [RFC2046]. This is intended to easily enable the pipe and filter style for clients and servers that understand and offer HCLI semantics. Specific input stream processing semantics by services are out of scope of this specification. Servers SHOULD, however, in as much as it doesn't interfere with pipe and filter streaming behavior, endeavor to support receiving and sending correctly identified media-types to help maintain visibility on the network. Servers intending for clients to present coherent error messaging to Michaud Expires August 12, 2025 [Page 17] Internet-Draft Hypertext Command Line Interface February 8, 2025 the standard error output stream (STDERR) SHOULD return an HTTP API problem detail [RFC9457]. Servers SHOULD abide by the Unix philosophy regarding successes. Notably, servers SHOULD favor "success equals silence" to enable piping without noise from success messages, and CLI behavior SHOULD remain predictable and composable. 6.1.2. For Clients in General Command line clients that support input stream processing SHOULD attempt to send their input stream to an HCLI server, but only if a command line sequence leads to an unsafe HTTP POST or idempotent HTTP PUT Execution. Clients MUST minimally support sending input streams (STDIN) and receiving output streams (STDOUT) under the application/octet-stream [RFC2046] media-type. Command line clients SHOULD, however, endeavor to communicate input streams by using the most appropriate media-type representing the input stream to transfer, and SHOULD also be ready to process responses making use of the most appropriate media-type for the received response, to help maintain visibility on the network. Clients SHOULD also be ready to support HTTP API problem details [RFC9457] to help yield a sensible standard error output stream (STDERR). Clients SHOULD give navigation precedence to a Parameter, over Commands and Options, when presented in an HCLI Document. 6.1.2. For Command Line Clients Command line interface (CLI) clients SHOULD support receiving input from STDIN, or other equivalent, to allow for pipe and filter processing. Command line clients receiving the result of a successful HCLI command line execution SHOULD output the result to STDOUT, or other equivalent, to allow for further pipe and filter processing. Command line clients receiving failure results from an HCLI command line execution in the form of an HTTP API problem detail [RFC9457] SHOULD output the failure result detail to STDERR, or other equivalent, to allow for further pipe and filter processing. 7. Recommendations Michaud Expires August 12, 2025 [Page 18] Internet-Draft Hypertext Command Line Interface February 8, 2025 7.1. Standard HCLI ALPS Profile The standard HCLI ALPS profiles defined in this specification MAY be hosted alongside an HCLI API deployment and correspondingly referenced in an HCLI Document to enable self-contained deployment. HCLI Documents SHOULD, however, reference the standard HCLI ALPS profile hosted at an independent ALPS registry (APR). 7.2. For Clients in General 7.2.1. Command Line Execution Submitting a command line sequence SHOULD prompt a client to automatically, and sequentially parse submitted arguments, and to navigate through sequences of HCLI Documents, by using Command or Option "name" or the Parameter variable "hcli_param", corresponding to each parsed command, option or parameter. A client MAY want to facilitate disambiguation of user supplied parameters from commands and options by always assuming that strings surrounded by the double quote character (i.e. "), or the single quote character (i.e. '), are intended to be submitted as a user supplied parameter. Upon running out of commands, options and parameters to parse for use in HCLI navigation, a client SHOULD automatically attempt an Execution. If Execution isn't available, the command line execution SHOULD be treated as a failure and the last successfully retrieved HCLI Document MAY be used to provide useful feedback to help users correct mistakes. 7.2.2. Documentation The reserved "help" command MAY be used anywhere in a command line sequence and SHOULD present documentation formatted from the last successfully retrieved HCLI Document preceding the "help" command. 7.2.3. Robustness To maximize robustness, clients SHOULD endeavor to follow Postel's law (e.g. be conservative in what you do, be liberal in what you accept from others). In other words, and of particular interest in this case, clients consuming coherent HCLI semantics intermixed with non-HCLI semantics they don't understand, SHOULD favor ignoring what they don't understand over failing. Michaud Expires August 12, 2025 [Page 19] Internet-Draft Hypertext Command Line Interface February 8, 2025 7.3. For Command Line Clients (e.g. Under Unix/Linux shell) 7.3.1. Documentation When generating documentation via "help", a man page SHOULD be presented and formatted from the last successfully retrieved HCLI Document preceding the "help" command. If man pages are not available for use in the command line environment, an environment specific equivalent SHOULD be used to provide users with useful documentation. Additionally, clients SHOULD automatically generate an OPTIONS and COMMANDS section, two sections reserved for client use, that corresponds to a listing of Options and Commands referenced in the presented HCLI Document. 8. Security Considerations TBD 9. IANA Considerations This specification introduces the "cli" link relation per [RFC5988] to indicate the presence of command line interface semantics. The link relation SHOULD be accompanied by a "profile" [RFC6906] defining command line interface semantics. This specification defines a standard ALPS profile to be used in conjunction with the "cli" link relation but does NOT REQUIRE that the HCLI profile defined in this specification be the only profile used in conjunction with the "cli" link relation. 10. References 10.1. Normative References [RFC6906] Wilde, E., "The 'profile' Link Relation Type", RFC 6906, March 2013. [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, March 1997. [RFC5988] Nottingham, M., "Web Linking", RFC 5988, October 2010. [RFC3986] Berners-Lee, T., Fielding, R., and L. Masinter, "Uniform Resource Identifier (URI): Generic Syntax", STD 66, RFC Michaud Expires August 12, 2025 [Page 20] Internet-Draft Hypertext Command Line Interface February 8, 2025 3986, January 2005. [RFC6570] Gregorio, J., Fielding, R., Hadley, M., Nottingham, M., and D. Orchard, "URI Template", RFC 6570, March 2012. [RFC2046] Freed, N., Innosoft, Borenstein, N., First Virtual, "Multipurpose Internet Mail Extensions", RFC 2046, November 1996. [RFC9457] Nottingham, M., Wilde, E., Dalal, S., "Problem Details for HTTP APIs", RFC 9457, March 2016. 10.2. Informative References [I-D.draft-kelly-json-hal] Kelly, M., "JSON Hypertext Application Language", draft- kelly-json-hal-11 (work in progress), October 2023. [I-D.draft-amundsen-richardson-foster-alps] Amundsen, M., CA Technologies, Inc., Richardson L., Foster, M., "Application-Level Profile Semantics (ALPS)", draft-amundsen-richardson-foster-alps-04 (work in progress), October 2020. Appendix A. Acknowledgements Thanks to Mike Amundsen, Mark Foster and others on the ALPS Discussion list for providing invaluable feedback during the definition of the HCLI ALPS profile. Michaud Expires August 12, 2025 [Page 21] Internet-Draft Hypertext Command Line Interface February 8, 2025 Appendix B. Frequently Asked Questions B.1. What are some of the benefits of HCLI? B.1.1. Reduced Cost The most immediate benefit is that instead of having to develop a custom client for your HCLI API, you can benefit from the use of a standard client that understands HCLI semantics. Such a client would be able to interact out-of-the-box with any HCLI as an imposter CLI; you get a free bridge into the pipe and filter style for your HCLI connector fronted API. B.1.2. Self-documenting and Up-to-date An HCLI is self-documenting in that the commands, options and parameters that can be selected are plainly visible through the documentation mechanisms highlighted in this specification. Moreover, given the distributed nature of the HCLI semantic interface, changes made to an HCLI are always distributed to all clients using the API. Clients can always benefits from up-to-date functionality and up-to- date documentation. B.1.3. Immediacy Having at your disposal an instantly usable shell CLI for your HCLI provides developers with an immediately usable, and familiar, solution through a familiar mode of operation (pipe and filter). B.1.4. Scripting and Experimentation By enabling the pipe and filter style, HCLI also enables notions of scripting, an inherent and well understood companion of the pipe and filter style under shell (e.g. Unix/Linux). HCLI enables scripting orchestration and experimentation. B.1.5. Building Blocks HCLI also raises notions of reusable HCLIs and of an ecosystem of shareable and reusable HCLIs to be used as building blocks to help in the construction and orchestration of APIs, with minimal work. B.1.5. Native Because the entire HCLI semantic interface (connector) leading all the way up to an API surface (component) is safe from side-effects, we raise the possibility of "nativizing" an HCLI by allowing for a CLI to be auto-generated, on demand, to run locally and natively Michaud Expires August 12, 2025 [Page 22] Internet-Draft Hypertext Command Line Interface February 8, 2025 (without the extra overhead of navigating through hypertext); improving on performance and creating a "frozen" version of a CLI. Author's Address Jeff Michaud Email: cometaj2@proton.me Twitter: @cometaj2 Michaud Expires August 12, 2025 [Page 23]