Braid-HTTP: Synchronization for HTTP
draft-toomim-httpbis-braid-http-02

Document Type Active Internet-Draft (individual)
Last updated 2020-03-09
Replaces draft-toomim-braid
Stream (None)
Intended RFC status (None)
Formats plain text pdf htmlized bibtex
Stream Stream state (No stream defined)
Consensus Boilerplate Unknown
RFC Editor Note (None)
IESG IESG state I-D Exists
Telechat date
Responsible AD (None)
Send notices to (None)
Internet-Draft                                                 M. Toomim
Expires: Jul 10, 2020                                  Invisible College
Intended status: Proposed Standard                             G. Little
                                                       Invisible College
                                                               R. Walker
                                                            Bard College
                                                              B. Bellomy
                                                       Invisible College
                                                             Mar 9, 2020

      \=/====\\   |//===\\=       /=\      =\==\|\=/==  =|====\==
      ||/    |\\  ||\    |\\    /|| \|\        |//      //|    \\\
      |\\    |//  |\\    |//   //|   \\\       \\\      /\/    |||
      \=|====|=   |/====/=\   /=\/====|=\      =\=      \\=    =/=
      //\    /\\  //|    |\\  |/|     |||      \\\      |||    |//
      |||    |||  |\\    |//  |\/     \|/      /|\      |=\    |\\
      =\=\==/=/   ==|    |\=  ||=     /==  ===/=|=\===  |==\===//

                  Braid-HTTP: Synchronization for HTTP
                   draft-toomim-httpbis-braid-http-02

Abstract

   Braid is a set of extensions that generalize HTTP from a state
   *transfer* protocol into a state *synchronization* protocol.  Braid
   puts the power of Operational Transform and CRDTs on the web,
   improving network performance and enabling natively peer-to-peer,
   collaboratively-editable, offline-first web applications.

   Braid is composed of four extensions to HTTP:

     1. VERSIONING on resources
     2. SUBSCRIPTIONS on GET requests
     3. PATCHES created from Range Requests
     4. MERGE-TYPES that specify OT or CRDT behavior

   These extensions are independent; each provides a distinct value for
   a stand-alone use-case.  However, when used together, they enable a
   web resource to synchronize automatically across multiple clients,
   servers and proxies, and support arbitrary simultaneous edits by
   multiple writers, under arbitrary network delays and partitions,
   while guaranteeing consistency using a OT, CRDT, or other algorithm.

   These synchronization features provide a step towards a standard for
   the dynamic internal state of websites.  Web programmers currently
   synchronize state across clients and servers with layers of
   non-standard Javascript frameworks.  A synchronization standard built
   upon REST can enable programmers to read and write the internal state
   of any website as easily as a local variable on their own site.  This
   could enable a separation of UI from state, and allow any user to
   edit or choose their own UI for any website's state.




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), its areas, and its working groups.  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."

   The list of current Internet-Drafts can be accessed at
   https://www.ietf.org/1id-abstracts.html

   The list of Internet-Draft Shadow Directories can be accessed at
   https://www.ietf.org/shadow.html




Table of Contents

   1.  Introduction ..................................................4
   2.  Versioning for Resources ......................................5
   2.1.  Comparison with ETag ........................................5
   2.2.  PUT a new version ...........................................6
   2.3.  PUT a new version as a patch ................................6
   2.4.  GET a specific version ......................................8
   3.  Subscriptions for GET .........................................9
   3.1.  Creating a Subscription ....................................11
   3.2.  Sending multiple updates per GET ...........................11
   3.3.  Continuing a Subscription ..................................12
   3.4.  Ending a Subscription ......................................12
   3.5.  Errors .....................................................12
   4.  Design Goals..................................................13
   5.  Use Cases ....................................................13
   5.1.  Dynamic Resources ..........................................13
   5.2.  Dynamic Proxies and Caches .................................14
   5.3.  A Serverless Chat Example ..................................14
   6.  Related Work .................................................15
   6.1.  Web Frameworks .............................................15
Show full document text