Tolles Community-Modul

Ein einfacher und zusammensetzbarer Weg
um Daten in JavaScript zu validieren.



VerwendungWarum?PrinzipienDemoBeispieleDokumentation



Mit Superstruct ist es einfach, Schnittstellen zu definieren und JavaScript-Daten daraufhin zu überprüfen . Die API für Typanmerkungen wurde von Typescript , Flow , Go und GraphQL inspiriert und bietet eine vertraute und leicht verständliche API.

Superstruct wurde jedoch für die Validierung von Daten zur Laufzeit entwickelt, sodass es detaillierte Laufzeitfehler für Sie oder Ihre Endbenutzer ausgibt (oder zurückgibt). Dies ist insbesondere in Situationen nützlich, in denen beliebige Eingaben in einer REST- oder GraphQL-API akzeptiert werden. Es kann jedoch auch verwendet werden um interne Datenstrukturen bei Bedarf zur Laufzeit zu validieren.


Usage

Superstruct exportiert eine struct zum Erstellen von Strukturen, mit denen Daten anhand eines bestimmten Schemas validiert werden können:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
import { struct } from 'superstruct' const Article = struct({ id: 'number', title: 'string', is_published: 'boolean?', tags: ['string'], author: { id: 'number', }, }) const data = { id: 34, title: 'Hello World', tags: ['news', 'features'], author: { id: 1, }, } const article = Article(data) // This will throw when the data is invalid, and return the data otherwise. // If you'd rather not throw, use `Struct.validate()` or `Struct.test()`.

Alle systemeigenen JavaScript-Typen werden automatisch erkannt, Sie können jedoch auch mithilfe des superstruct Exports Ihre eigenen benutzerdefinierten Datentypen definieren, die den Anforderungen Ihrer Anwendung entsprechen:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
import { superstruct } from 'superstruct' import isUuid from 'is-uuid' import isEmail from 'is-email' const struct = superstruct({ types: { uuid: value => isUuid.v4(value), email: value => isEmail(value) && value.length < 256, }, }) const User = struct({ id: 'uuid', email: 'email', is_admin: 'boolean?', }) const data = { id: 'c8d63140-a1f7-45e0-bfc6-df72973fea86', email: 'jane@example.com', } const user = User(data)

Superstruct unterstützt auch komplexere Anwendungsfälle wie das Definieren von Listen- oder Skalarstrukturen, das Anwenden von Standardwerten, das Zusammensetzen von Strukturen ineinander, das Zurückgeben von Fehlern, anstatt sie zu werfen usw. Weitere Informationen finden Sie in der vollständigen Dokumentation .


Why?

Die Validierung bestehender LOTS gibt es Libraries joi , express-validator , validator.js , yup , ajv , is-my-json-valid ... Aber in Exhibit VIELE Sie Delinquenz , dass Ihr Lead der Codebasis Becoming schwer zu pflegen ...

  • Sie stellen keine detaillierten Fehler dar. Viele Validatoren geben einfach nur Fehler oder Boolesche Werte zurück, ohne die Gründe zu nennen, was es schwierig macht, die Fehler so anzupassen, dass sie für Endbenutzer hilfreich sind.

  • Sie erschweren benutzerdefinierte Typen. Viele Validatoren werden mit integrierten Typen wie E-Mails, URLs, UUIDs usw. ausgeliefert, ohne dass sie wissen, wonach sie suchen, und mit komplizierten APIs zum Definieren neuer Typen.

  • Sie fördern nicht einzelne Wahrheitsquellen. Viele vorhandene APIs fördern die wiederholte Neudefinition benutzerdefinierter Datentypen, wobei die Wahrheitsquelle über die gesamte Codebasis verteilt ist.

  • Sie werfen keine Fehler. Viele werfen die Fehler nicht wirklich und zwingen Sie dazu, überall einen Zeilenumbruch durchzuführen. Obwohl dies in Zeiten von Rückrufen hilfreich war, macht die Nichtverwendung von throw in modernem JavaScript den Code viel komplexer.

  • Sie kompilieren Schemas nicht vor. Viele Validatoren definieren Schemas als reine JavaScript-Objekte . Dies bedeutet, dass sie das Parsen der Schemalogik an die Validierungszeit delegieren, wodurch sie viel langsamer werden.

  • Sie sind eng mit anderen Anliegen verbunden. Viele Validatoren sind eng mit Express oder anderen Frameworks verbunden, was zu einmaligem, verwirrendem Code führt, der in Ihrer gesamten Codebasis nicht wiederverwendbar ist.

  • Sie verwenden das JSON-Schema. Verstehen Sie mich nicht falsch, das JSON-Schema kann nützlich sein. Aber es ähnelt HATEOAS - es ist normalerweise viel komplexer als Sie brauchen und Sie nutzen keinen seiner Vorteile (Entschuldigung, ich habe es gesagt) .)

Natürlich leidet nicht jede Validierungsbibliothek an all diesen Problemen, aber die meisten weisen mindestens eines auf. Wenn Sie bereits auf dieses Problem gestoßen sind, könnte Ihnen Superstruct gefallen.

Was mich dazu bringt, wie Superstruct diese Probleme löst ...


Principles

  1. Anpassbare Datentypen: Mit Superstruct können Sie auf einfache Weise eine ganze Reihe benutzerdefinierter Datentypen definieren, die für Ihre Anwendung spezifisch sind und an einem einzigen Ort definiert werden. So haben Sie die volle Kontrolle über Ihre Anforderungen.

  2. Uneingeschränkte Standardeinstellungen: Superstruct wird mit nativen JavaScript-Typen ausgeliefert, und alles andere ist anpassbar. Sie müssen also nie darum kämpfen, Entscheidungen von "core" außer Kraft zu setzen, die von den Anforderungen Ihrer Anwendung abweichen.

  3. Zusammensetzbare Schnittstellen: Superstruct-Schnittstellen sind zusammensetzbar, sodass Sie häufig wiederholte Daten in Komponenten aufteilen und diese zusammensetzen können, um die komplexeren Objekte aufzubauen.

  4. Knappe Schemata: Die Schemata in Superstruct sind äußerst kurz und aussagekräftig, sodass sie sehr einfach zu lesen und zu schreiben sind.

  5. Kompilierte Validatoren: Superstruct kompiliert die Schemas im Vorfeld, damit Sie nicht bei jedem Aufruf der Validierungsfunktionen in Ihren Hot-Code-Pfaden teure Aufgaben ausführen müssen.

  6. Nützliche Fehler: Die Fehler, die Superstruct auslöst, enthalten alle Informationen, die Sie benötigen, um sie in anwendungsspezifische Fehler umzuwandeln.

  7. Vertraute API: Die Superstruct-API wurde stark von Typescript , Flow , Go und GraphQL inspiriert . Wenn Sie mit einer dieser APIs vertraut sind, fühlt sich die Verwendung der Schemadefinitions- API sehr natürlich an, sodass Sie schnell loslegen können.


Demo

Probieren Sie die Live-Demo von JSFiddle aus , um eine Vorstellung davon zu bekommen, wie die API funktioniert, oder um Ihren Anwendungsfall schnell zu überprüfen:

Demo-Screenshot.


Examples

Die Superstruct-API ist sehr flexibel und kann für eine Vielzahl von Anwendungsfällen auf Ihren Servern und im Browser verwendet werden.


Documentation

Lesen Sie die Kurzanleitung, um sich mit der Funktionsweise von Superstruct vertraut zu machen. Lesen Sie anschließend die vollständige API-Referenz, um detailliertere Informationen zu Strukturen, Typen und Fehlern zu erhalten.


License

Dieses Paket ist MIT-licensed .