[Tools-arch] Recommendation 6: Architectural model for clients

Jay Daley <jay@ietf.org> Fri, 09 April 2021 01:12 UTC

Return-Path: <jay@ietf.org>
X-Original-To: tools-arch@ietfa.amsl.com
Delivered-To: tools-arch@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id CB3973A24CB for <tools-arch@ietfa.amsl.com>; Thu, 8 Apr 2021 18:12:31 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -1.898
X-Spam-Level:
X-Spam-Status: No, score=-1.898 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, HTML_MESSAGE=0.001, URIBL_BLOCKED=0.001] autolearn=ham autolearn_force=no
Received: from mail.ietf.org ([4.31.198.44]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id gRu_mzw0dWYG for <tools-arch@ietfa.amsl.com>; Thu, 8 Apr 2021 18:12:30 -0700 (PDT)
Received: from jays-mbp.localdomain (unknown [158.140.230.105]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPSA id 3E2563A24CA for <tools-arch@ietf.org>; Thu, 8 Apr 2021 18:12:29 -0700 (PDT)
From: Jay Daley <jay@ietf.org>
Content-Type: multipart/alternative; boundary="Apple-Mail=_D6B9452A-DBB2-4292-BCFD-4A40B0109CC4"
Mime-Version: 1.0 (Mac OS X Mail 13.4 \(3608.120.23.2.4\))
Message-Id: <303C8EC5-1D35-48A6-A69E-667491EC4972@ietf.org>
Date: Fri, 09 Apr 2021 13:12:25 +1200
To: tools-arch@ietf.org
X-Mailer: Apple Mail (2.3608.120.23.2.4)
Archived-At: <https://mailarchive.ietf.org/arch/msg/tools-arch/RgFfcNKiHjA8KfRqkBewvBoQBog>
Subject: [Tools-arch] Recommendation 6: Architectural model for clients
X-BeenThere: tools-arch@ietf.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: Tools Architecture and Strategy Team <tools-arch.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/tools-arch>, <mailto:tools-arch-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/tools-arch/>
List-Post: <mailto:tools-arch@ietf.org>
List-Help: <mailto:tools-arch-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/tools-arch>, <mailto:tools-arch-request@ietf.org?subject=subscribe>
X-List-Received-Date: Fri, 09 Apr 2021 01:12:32 -0000

=  Recommendation

Recommendation 6:  This survey has identified four broad categories of client that are in use: Editor, Build System, Web Service and Command Line Tool; and four broad categories of functionality provided by the tools: Editing, Boilerplate, Validation and Format Conversion.  An architectural model is needed that sits above and incorporates these categories of clients and functionality, and determines how new and existing services/tools integrate, easily and efficiently. 

=  Commentary

Respondents have been clear that they use the tools from a variety of clients and the current de facto interoperability model is the filesystem.  

	• Editors directly invoke tools locally by pushing the edited content to a temporary file and then reading in the results

	• Build systems invoke multiple tools sequentially passing the output from one to another using a filesystem

	• Using a web service as an interactive UI to a tool with the document provided as input

	• Direct invocation front the command line on a local document.

If these categories of clients are explicitly recognised and put on an equal footing then this leads to a big question:

Should our tools development adopt a modern paradigm for supporting a variety of clients doing the same thing, which is a single backend API with different front ends all calling that same API?

If that is to be the case then it is worthwhile considering standardising aspects of those APIs so that new tools authors do not have to start from scratch and so that clients do not need to support too many different APIs.  Such standardisation might include:

	• The expected action of the tools
		• Editing - alter the existing document/fragment
		• Boilerplate - insert into an existing document/fragment
		• Validation - make no changes to the existing document/fragment but provide a set of annotations of it
		• Format conversion - provide an entirely new document/fragment
	• Fragment identification, selection, annotation etc.

This could come under a single architectural model such as::

        Clients                            API Services      
                                                            
┌──────────────────────┐             ┌──────────────────────┐
│                      │             │                      │
│                      │             │   ┌──────────────┐   │
│                      ├────────────▶│   │   Extract    │   │
│                      │             │   │   Elements   │   │
│   ┌──────────────┐   │             │   └──────────────┘   │
│   │    Editor    │   │             │   ┌──────────────┐   │
│   │              │   │             │   │   Insert     │   │
│   └──────────────┘   ├────────────▶│   │   Custom or  │   │
│   ┌──────────────┐   │             │   │ Boilerplate  │   │
│   │    Build     │   │             │   └──────────────┘   │
│   │    System    │   │             │   ┌──────────────┐   │
│   └──────────────┘   │             │   │   Validate   │   │
│   ┌──────────────┐   ├────────────▶│   │   Full or    │   │
│   │     Web      │   │             │   │   Partial    │   │
│   │   Service    │   │             │   └──────────────┘   │
│   └──────────────┘   │             │   ┌──────────────┐   │
│   ┌──────────────┐   │             │   │   Convert    │   │
│   │   Command    │   ├────────────▶│   │   Between    │   │
│   │  Line Tool   │   │             │   │   Formats    │   │
│   └──────────────┘   │             │   └──────────────┘   │
│                      │             │   ┌──────────────┐   │
│                      ├────────────▶│   │  Datatracker │   │
│                      │             │   │  Submission  │   │
│                      │             │   └──────────────┘   │
│                      │             │                      │
└──────────────────────┘             └──────────────────────┘


-- 
Jay Daley
IETF Executive Director
jay@ietf.org