Tolles Community-Modul

Eine einfache und zusammenstellbare Möglichkeit
, Daten in JavaScript zu validieren.



VerwendungWarumPrinzipienDemoBeispieleDokumentation



Superstruct macht es einfach, Schnittstellen zu definieren und dann JavaScript-Daten gegen sie zu validieren.Seine Typannotations- API wurde von Typescript , Flow , Go und GraphQL inspiriert und bietet eine vertraute und leicht verständliche API.

Aber Superstruct wurde für die Validierung von Daten zur Laufzeit entwickelt, sodass detaillierte Laufzeitfehler für Sie oder Ihre Endbenutzer ausgegeben (oder zurückgegeben) werden. Dies ist besonders nützlich in Situationen wie dem Akzeptieren beliebiger Eingaben in einer REST- oder GraphQL-API. Aber es kann sogar verwendet werden. um interne Datenstrukturen bei Bedarf zur Laufzeit zu validieren.


Usage

Superstruct exportiert eine structFactory zum Erstellen von Strukturen, die Daten anhand eines bestimmten Schemas validieren 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()`.

Es erkennt alle nativen JavaScript-Typen sofort, aber Sie können auch Ihre eigenen benutzerdefinierten Datentypen definieren – speziell für die Anforderungen Ihrer Anwendung – indem Sie den superstructExport verwenden:

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 auszuwerfen usw. Für weitere Informationen lesen Sie die vollständige Dokumentation .


Why?

Gibt es viele existierende Validierungsbibliotheken - joi, express-validator, validator.js, yup, ajv, is-my-json-valid... Aber sie zeigen VIELE UND STRAFFELDIGKEIT, die dazu führen, dass Ihre Codebasis schwer zu warten ist ...

  • Sie stellen keine detaillierten Fehler dar. Viele Validatoren geben einfach nur Zeichenfolgenfehler oder boolesche Werte ohne Details dazu zurück, 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 zu wissen, wonach sie suchen, und komplizierten APIs zum Definieren neuer Typen.

  • Sie fördern keine einzelnen Quellen der Wahrheit. Viele vorhandene APIs ermutigen dazu, benutzerdefinierte Datentypen immer wieder neu zu definieren, wobei die Quelle der Wahrheit über Ihre gesamte Codebasis verteilt wird.

  • Sie lösen keine Fehler aus. Viele lösen die Fehler nicht wirklich aus und zwingen Sie, überall zu umbrechen. Obwohl dies in der Zeit der Rückrufe hilfreich war, macht die Nichtverwendung throwin modernem JavaScript den Code viel komplexer.

  • Sie kompilieren keine Schemas vor.Viele Validatoren definieren Schemas als einfache JavaScript-Objekte, was bedeutet, dass sie das Parsen der Schemalogik an die Validierungszeit delegieren, was sie viel langsamer macht.

  • 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 Codebasis nicht wiederverwendbar ist.

  • Sie verwenden das JSON-Schema. Versteh mich nicht falsch, JSON-Schema kann nützlich sein. Aber es ist ein bisschen wie HATEOAS – es ist normalerweise viel komplexer als du brauchst und du nutzt keinen seiner Vorteile. (Entschuldigung, ich habe es gesagt .)

Natürlich leidet nicht jede Validierungsbibliothek unter all diesen Problemen, aber die meisten weisen mindestens eines auf.Wenn Sie dieses Problem schon einmal hatten, wird Ihnen Superstruct vielleicht gefallen.

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


Principles

  1. Anpassbare Typen: Die Stärke von Superstruct liegt darin, dass Sie ganz einfach einen ganzen Satz benutzerdefinierter Datentypen definieren können, die spezifisch für Ihre Anwendung sind und an einem einzigen Ort definiert werden, sodass Sie die volle Kontrolle über Ihre Anforderungen haben.

  2. Meinungslose Standardeinstellungen Superstruct wird mit nativen JavaScript-Typen geliefert , und alles andere ist anpassbar, sodass Sie nie darum kämpfen müssen, Entscheidungen des "Kerns" zu überschreiben, die von den Anforderungen Ihrer Anwendung abweichen.

  3. Zusammensetzbare Schnittstellen Superstruct-Schnittstellen sind zusammensetzbar, sodass Sie häufig wiederholte Daten in Komponenten zerlegen und diese zu komplexeren Objekten zusammensetzen können.

  4. Knappe Schemata: Die Schemas in Superstruct sind äußerst knapp und ausdrucksstark gestaltet, wodurch sie sehr einfach zu lesen und zu schreiben sind und Sie eine vollständige Datenvalidierungsabdeckung erhalten.

  5. Kompilierte Validatoren: Superstruct übernimmt die Kompilierung seiner Schemas im Voraus, damit keine Zeit damit verschwendet wird, bei jedem Aufruf der Validierungsfunktionen in Ihren Hot-Code-Pfade kostspielige Aufgaben auszuführen.

  6. Nützliche Fehler Die von Superstruct ausgegebenen Fehler enthalten alle Informationen, die Sie benötigen, um sie einfach in Ihre eigenen anwendungsspezifischen Fehler umzuwandeln, was für Ihre Endbenutzer hilfreichere Fehler bedeutet!

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


Demo

Probieren Sie die Live-Demo auf JSFiddle aus , um sich ein Bild von der Funktionsweise der API zu machen oder Ihren Anwendungsfall schnell zu überprüfen:

Demo-Screenshot.


Examples

Die API von Superstruct ist sehr flexibel und kann für eine Vielzahl von Anwendungsfällen auf Ihren Servern und im Browser verwendet werden.Hier sind einige Beispiele für gängige Muster...


Documentation

Lesen Sie den Leitfaden "Erste Schritte", um sich mit der Funktionsweise von Superstruct vertraut zu machen. Sehen Sie sich anschließend die vollständige API-Referenz an, um detailliertere Informationen zu Strukturen, Typen und Fehlern zu erhalten...


License

Dieses Paket ist MIT-licensed.