JavaScript: Ketting 7.0 baut Unterstützung für HAL-Forms aus

Die siebte Hauptversion des generischen REST-Client für JavaScript unterstützt die aktuelle Version der HAL-Forms von Spring HATEOAS und weitere React-Elemente.

In Pocket speichern vorlesen Druckansicht

(Bild: bluebay/Shutterstock.com)

Lesezeit: 4 Min.
Von
  • Silke Hahn
Inhaltsverzeichnis

Der kanadische Webentwickler Evert Pot hat die siebte Hauptversion von Ketting herausgebracht, einem generischen REST-Client für JavaScript. Ketting soll laut Releasemeldung eine Lücke schließen, die im Bereich JavaScript und TypeScript bestanden hatte, denn es gilt als erster generischer Client für HATEOAS (Hypermedia as the Engine of Application State), das Projekt besteht seit 2016.

Mit Ketting lassen sich JSON-Objekte über HTTP anstoßen und je nach Leistungsumfang der verwendeten API können Entwicklerinnen und Entwickler damit eine Reihe von Prozessen automatisiert durchführen. Der REST-Client unterstützt Hypermedia-Formate wie HAL (Hypertext Application Language), Siren, Collection+JSON, JSON:API und kann offenbar auch HTML-Links erkennen und nachvollziehen.

Version 7 bringt ausgebaute Unterstützung für HAL-FORMS, eine Erweiterung der offenen Spezifikation HAL, mit der sich Repräsentationen von RESTful-Ressourcen strukturieren lassen. HAL gilt als wenig komplex und einfach zu handhaben – unter der Einschränkung, dass beim Einsatz von HAL für APIs bei dynamischem User-Input und schwankenden Workflow-Mustern detailliertere Informationen über die Transaktion (wie Methoden, Workflow, Args) dann direkt im Client-Code enthalten sein müssen. Der von HAL abgeleitete Medientyp HAL-FORMS ist ein Format zur Darstellung von API-Antworten und besteht aus einem JSON-Dokument, das Informationen über die HTTP-Methode und die Inhaltsart der Nachricht enthält.

Die neue Hauptversion des REST-Clients für JavaScript ist laut Releasemeldung im Blog des Entwicklers auf die Neuerungen der HAL-FORMS zugeschnitten, die die Community rings um das Projekt Spring HATEOAS in Version 1.3 M2 Anfang 2021 veröffentlicht hat (offenbar ist noch unklar, ob die aktuelle HATEOAS-Version als stabil gilt). Einige wesentliche neue Features von HAL-FORMS, die Ketting unterstützt, sind die Lookups, HTML5-Eingabetypen wie checkbox, color oder email sowie Feldattribute aus HTML5-Formularfeldern wie placeholder, min, max, step, cols oder rows. Auch das Formular-target, das zuvor nur durch die URL greifbar war, sowie mehrfache Formulare pro Dokument unterstützt Ketting 7.

Im Bereich der React-Bindings sind drei Features neu hinzugekommen. So verfügt react-ketting nun über eine RequireLogin-Komponente, die sich um die OAuth2-Autorisierungs-Flows in React-Anwendungen kümmert (authorization_code). Neu ist auch ein useCollection-Hook zum Rendern einer Sammlung auf dem Server, und das Flag refreshOnStale für useResource und useCollection, mit dem Ketting den Server automatisch nach dem neuen Ressourcen-Zustand fragt, sobald der Cache für eine Ressource als stale gekennzeichnet ist. Folgendes Code-Beispiel führt das Rendern eines useCollection-Hooks vor:

import { useCollection, useResource } from 'react-ketting';
import { Resource } from 'resource';

type Article = {
  title: string;
  body: string;
}

function ArticleList() {

  const { loading, items } = useCollection<Article>('/articles');

  if (loading) return <div>Loading...</div>;

  return <section>
    <h1>Articles!</h1>

    {items.map( item => <ArticleItem key={item.uri} resource={item} /> ) }
  </section>;

}

function ArticleItem({resource}: { resource: Resource<Article> }) {

  const { loading, data } = useResource(resource);

  if (loading) return <div>Loading...</div>;

  return <div>
    <h2>{data.title}</h2>
    <p>{data.body}
  </div>

}

Bezüglich refreshOnStale hebt der Herausgeber hervor, dass die Flag besonders bei POST-Anfragen an eine Collection gut einsetzbar sei, wenn es darum geht, ein neues Mitglied hinzuzufügen. Die Collection sollte dann automatisch ihre eigene Liste neu laden, wenn man zuvor auch einen useCollection-Hook auf der gleichen Seite platziert hatte.

Ketting 7 sendet Warnmeldungen, wenn es auf als veraltet (deprecated) ausgezeichnete Header stößt, so reagiert es zum Beispiel auf die Begriffe Deprecation und Sunset, aber auch auf den Hinweis status: "deprecated". HTTP/2 Push haben die Entwickler offiziell begraben: Das Feature Prefer-Push ist aus Ketting entfernt. Eine weitere Änderung betrifft das Caching, das frisch erstellte Ressourcen offenbar intelligenter behandelt als vorher, indem es den Response-Body gemeinsam mit dem neuen Uniform Resource Identifier (URI) im Cache aufnimmt.

Ketting 7 gilt seit Januar als produktionsreif. Wer Ketting bereits im Einsatz hat, kann mit folgendem Befehl das Upgrade durchführen:

npm i ketting@7 ​
npm i react-ketting@2 # React users only​

Für die Zukunft ist eine bessere Dokumentation geplant, der React-Support soll weiter ausgebaut werden und Bindings für andere Frontend-Frameworks stehen auf dem Plan. Auch soll es ein offizielles Websocket-Add-on geben. Zum aktuellen Release lassen sich vertiefende Informationen dem Blogeintrag des Herausgebers entnehmen.

(sih)