API zur Erstellung ansprechender Bilder von Firmenprodukten aus Schokolade, Gold oder LEGO. Die Referenzimplementierung basiert auf OpenAI (Dall-E, GPT-3).
Es gibt einige erstaunliche, visuell ansprechende Unternehmensprodukte aus Schokolade oder LEGO
Inspiriert von den Funktionen der Bild- und Textgenerierung von OpenAI, generiert diese API Bilder der Produkte, sind Unternehmen am bekanntesten und verwandeln sie in Gold, Schokolade, LEGO oder jedes andere Material.
Befolgen Sie die generierte API -Dokumentation und klicken Sie auf die Schaltfläche "In Postman Ausführen"
Dieser Server wurde mit dem OpenAPI -Generatorprojekt generiert. Der Codegenerator und der generierte Code ermöglichen es Ihnen, Ihr System mit einer API-ersten Haltung zu entwickeln, in der der API-Vertrag der Anker und Definition Ihres Projekts ist, sowie Ihr Code und Ihre geschäftslogischen Ziele, die Begriffe in den Begriffen zu vervollständigen und einzuhalten der API -Vertrag.
NodeJS> = 10.6
NPM> = 6.10.0
Der Code wurde auf einem Mac geschrieben, sodass alle reibungslos auf Linux-basierten Computern funktionieren sollten. Es gibt jedoch keinen Grund, diese Bibliothek nicht auf Windows-basierten Maschinen auszuführen. Wenn Sie ein OS-bezogenes Problem finden, öffnen Sie bitte ein Problem und es wird behoben.
Verwenden Sie den OpenAPI -Generator, um Ihre Anwendung zu generieren: Angenommen java -jar {path_to_jar_file} generate -g nodejs-express-server -i {openapi yaml/json file} -o {target_directory_where_the_app_will_be_installed}
Sie haben Java (1.8+) und lassen Sie das JAR die Anwendung generieren. java -jar {path_to_jar_file} generate -g nodejs-express-server -i {openapi yaml/json file} -o {target_directory_where_the_app_will_be_installed}
if Sie haben nicht das Glas oder möchten Java nicht von Ihrer lokalen Maschine ausführen. Befolgen Sie die Anweisungen auf der Seite OpenAPitools. Sie können das Skript online, auf Docker und verschiedene andere Möglichkeiten ausführen.
Gehen Sie zu dem generierten Verzeichnis, das Sie definiert haben. Es gibt einen vollständig funktionierenden NodeJS-ExpressJS-Server, der auf Sie wartet. Dies ist wichtig - der Code gehört Ihnen, um sich zu ändern und zu aktualisieren! Schauen Sie sich Config.js an und sehen Sie, dass die Einstellungen dort in Ordnung sind - der Server wird auf Port 3000 ausgeführt, und Dateien werden in ein neues Verzeichnis "Uploadd_files" hochgeladen.
Der Server stützt sich auf eine openAPI.yaml -Datei, die unter /api/openapi.yaml liegt. Dies ist nicht genau dieselbe Datei, mit der Sie die App generiert haben: I. Wenn Sie application/json
-Contentbody haben, die im Pfadobjekt definiert wurden - hat die Erzeugung sie in den Abschnitt Komponenten/Schemas des OpenAPI -Dokuments verschoben. Ii. Jeder Prozess hat ein neues Element hinzugefügt- x-eov-operation-handler: controllers/PetController
das den Anruf an diese Datei leitet. III. Wir haben eine Java -Anwendung, die die OperationID in eine Methode übersetzt, und ein NodeJS -Skript, das denselben Prozess ausführt, um diese Methode aufzurufen. Beide konvertieren die Methode in camelCase
, könnten jedoch Diskrepanz aufweisen. Bitte achten Sie auf die operativen Namen und sehen Sie, dass sie in den controllers
und services
-Verzeichnissen vertreten sind.
Nehmen Sie sich Zeit, um die Struktur der Anwendung zu verstehen. Es kann Fehler geben, und es kann Einstellungen und Business-Logic geben, die Ihre Erwartungen nicht entsprechen. Anstatt diese Lösung abzuwerfen und nach etwas anderem zu suchen - prüfen Sie, ob Sie den generierten Code für Sie funktionieren können. Um die Erläuterung kurz zu halten (eine detailliertere Erklärung folgt): Die Anwendung beginnt mit einem Anruf bei Index.js (hier schließen Sie später die DB an). Es ruft ExpressServer.js auf, an dem die Express.js und der OpenAPI-VALIDATOR eintreten. Dies ist eine wichtige Datei. Lerne es. Alle Aufrufe zu Endpunkten, die im Dokument openAPI.YAML konfiguriert wurden, finden Sie unter controllers/{name_of_tag_which_the_operation_was_associated_with}.js
, was eine sehr kleine Methode ist. Alle Business -Logic liegen in controllers/Controller.js
und von dort - zu services/{name_of_tag_which_the_operation_was_associated_with}.js
.
Sobald Sie verstanden haben, was passieren wird , starten Sie die App und stellen Sie sicher, dass alles wie erwartet funktioniert:
npm start
(Angenommen, es wurden keine Änderungen an config.js vorgenommen)
API-Dokumentation und um die verfügbaren Endpunkte zu überprüfen: http: // localhost: 3000/api-docs/. Zu
Laden Sie das OpenAPI.YAML -Dokument herunter: http: // localhost: 3000/openAPI.
Jeder Anruf zu einem Endpunkt, der im OpenAPI -Dokument definiert wurde, wird eine 200 und eine Liste aller Parameter und Objekte zurückgeben, die in der Anfrage gesendet wurden.
Endpunkte, für die Sicherheit erforderlich ist, müssen Sicherheitshandler konfigurieren, bevor sie eine erfolgreiche Antwort zurückgeben können. Zu diesem Zeitpunkt geben sie einen Antwortcode von 401 zurück.
Im Root -Verzeichnis haben wir (neben Package.json, config.js und Protokolldateien):
Logger.js - wo wir den Logger für das Projekt definieren. Das Projekt verwendet Winston, aber der Zweck dieser Datei ist es, Benutzern das Verhalten des eigenen Protokolls zu ändern und zu ändern.
Index.js - Dies ist die "Haupt" -Datei des Projekts, und von hier aus starten wir die Anwendung. Dies ist eine sehr kurze und präzise Datei, und die Idee hinter dem Start aus dieser Short-Datei besteht darin, die Anwendungsfälle beim Starten des Servers mit unterschiedlichen Parametern (Änderungskonfiguration und/oder Logger) zu ermöglichen, ohne den Rest des Codes zu beeinflussen.
ExpressServer.js - Der Kern des Express.js -Servers. Hier wird der Express -Server zusammen mit dem OpenAPI -Validator, der OpenAPI -UI und anderen Bibliotheken initialisiert, die für den Start unseres Servers benötigt werden. Wenn wir externe Links hinzufügen möchten, würden sie dorthin gehen. Unser Projekt verwendet die Express-Openapi-Validator-Bibliothek, die als erster Schritt im Routing-Prozess fungiert-Anforderungen, die auf Pfade gerichtet sind, die in der openapi.yaml
-Datei definiert sind . Ein erfolgreiches Ergebnis dieser Validierung ist ein neues 'OpenAPI' -Objekt, das der Anfrage hinzugefügt wurde. Wenn der angeforderte Pfad nicht Teil der OpenAPI.yaml -Datei ist, ignoriert der Validator die Anforderung und führt sie ebenso wie in den Fluss des Express -Servers weiter.
OpenAPI.YAML - Dies ist der OpenAPI -Vertrag, dem dieser Server entspricht. Die Datei wurde mit dem CodeGen generiert und sollte alles enthalten, was zum Ausführen des API -Gateways erforderlich ist - keine Verweise auf externe Modelle/Schemas.
Derzeit eine einzige Datei:
OpenAPIROUTER.JS - Hier erfolgt das Routing zu unserem Back -End -Code. Wenn das Anforderungsobjekt ein openapi
Objekt enthält, wird die folgenden Werte (die Teil der openapi.yaml
Datei sind): "X-OpenAPI-Router-Controller" und "X-OpenAPI-Router-Service" aufgenommen. Diese Variablen sind Namen von Dateien/Klassen in den Verzeichnis von Controllern und Diensten. Die Operation der Anfrage wird ebenfalls extrahiert. Die OperationID ist eine Methode im Controller und im Dienst, der als Teil des Codegen -Prozesses generiert wurde. Der Routing -Prozess sendet die Anforderungs- und Antwortobjekte an den Controller, wodurch die erwarteten Variablen aus der Anforderung extrahiert werden und sie vom Dienst verarbeitet werden sollen, wobei die Antwort vom Dienst an den Anrufer zurückgibt.
Nach der Validierung der Anfrage und der Sicherstellung, dass dies zu unserem API -Gateway gehört, senden wir die Anfrage an einen controller
, bei dem die Variablen und Parameter aus der Anfrage extrahiert und zur Verarbeitung an den entsprechenden service
gesendet werden. Der controller
behandelt die Antwort aus dem service
und erstellt die entsprechende HTTP -Antwort, die an den Benutzer zurückgesendet werden soll.
Index.js - Laden Sie alle Controller, die für dieses Projekt erzeugt wurden, und exportieren Sie sie so dynamisch von openapiRouter.js
. Wenn Sie Ihren Controller anpassen möchten, wird empfohlen, dass Sie hier zu Ihrem Controller verknüpfen und sicherstellen, dass der CodeGen diese Datei nicht umschreibt.
Controller.js - Der Kernprozessor der generierten Controller. Die generierten Controller sind so schlank und allgemein wie möglich ausgelegt und beziehen sich auf den Controller.js
für die Geschäftslogik, um die erforderlichen Variablen und Argumente aus der Anfrage zu analysieren und die HTTP -Antwort zu erstellen, die zurückgesandt wird. Der Controller.js
ist eine Klasse mit statischen Methoden.
.js - automatisch generierter Code, Verarbeitung aller Vorgänge. Der Controller ist eine Klasse, die mit der Dienstklasse erstellt wird, an die er die Anfrage senden wird. Jede vom openapi.yaml
definierte Anfrage hat eine OperationID. Die OperationID ist der Name der Methode, die aufgerufen wird. Jede Methode empfängt die Anforderung und Antwort und ruft den Controller.js
auf, um die Anforderung und die Antwort zu verarbeiten, und fügen Sie die Servicemethode hinzu, die für die tatsächliche geschäftslogische Verarbeitung gefordert werden sollte.
Hier endet das API-Gateway, und der einzigartige Geschäftslogik Ihrer Anwendung beginnt. Jeder Endpunkt im openapi.yaml
hat eine variable "x-openapi-router-service", die der Name der Serviceklasse ist, die ist generiert. Die Operation ID des Endpunkts ist der Name der Methode, die aufgerufen wird. Der generierte Code bietet ein einfaches Versprechen mit einer Try/Catch -Klausel. Eine erfolgreiche Operation endet mit einem Aufruf an den generischen Service.js
, um eine erfolgreiche Antwort (Nutzlast und Antwortcode) zu erstellen, und ein Fehler ruft den Generic Service.js
auf, um eine Antwort mit einem Fehlerobjekt und dem entsprechenden Antwortcode zu erstellen. Es wird empfohlen, dass die Dienste einmal automatisch generiert werden und nach dem ersten Build -Add -Methoden manuell addieren.
Index.js - Laden Sie alle Dienste, die für dieses Projekt generiert wurden, und exportieren Sie sie so dynamisch von openapiRouter.js
. Wenn Sie Ihren Dienst anpassen möchten, wird empfohlen, dass Sie hier zu Ihrem Controller verlinken und sicherstellen, dass der CodeGen diese Datei nicht umschreibt.
Service.js - Eine Versorgungsklasse, die zu diesem Zeitpunkt sehr einfach und dünn ist, mit zwei statischen Methoden zum Erstellen eines Antwortobjekts für erfolgreiche und fehlgeschlagene Ergebnisse im Servicebetrieb. Der Standard -Antwortcode ist 200 für den Erfolg und 500 für das Scheitern. Es wird empfohlen, genauere Antwortcodes zu senden und diese Standardeinstellungen zu überschreiben, wenn sie relevant sind.
.js - automatisch generierter Code, das für jede im openapi.yaml
definierte Operation ein Stubversprechen bietet. Jede Methode empfängt die Variablen, die in der openapi.yaml
-Datei definiert wurden und ein Versprechen in eine Try/Catch -Klausel einbringen. Das Versprechen löst sowohl den Erfolg als auch das Misserfolg in einem Anruf bei der Dienstprogrammklasse von Service.js
, um die entsprechende Antwort zu erstellen, die an den Controller und dann an den Anrufer dieses Endpunkts zurückgeschickt wird.
serververtests.js - grundlegende Server -Validierungstests und prüfen, ob der Server abgelaufen ist, dass ein Aufruf an einen Endpunkt innerhalb des Umfangs der openapi.yaml
-Datei 200 zurückgibt, dass ein Anruf auf einen Pfad außerhalb dieses Umfangs 200 zurückgibt, wenn sie existiert und a 404 Wenn nicht.
RoutingTests.js - wird durch alle im openapi.yaml
definierten Endpunkte ausgeführt und konstruiert eine Dummy -Anfrage, um an den Server zu senden. Bestätigt, dass der Antwortcode 200 beträgt. Zu diesem Zeitpunkt sind Anfragen mit XML oder FormData fehlgeschlagen - derzeit werden sie im Router nicht unterstützt.
CULTUTEDPOINTSTESTS.JS - Eine Testdatei für alle Endpunkte, die außerhalb des OpenAPI.yaml -Bereichs definiert sind. Bestätigt, dass diese Endpunkte eine erfolgreiche 200 Antwort zurückgeben.
Zukünftige Tests sollten geschrieben werden, um sicherzustellen, dass die Antwort jeder gesendeten Anfrage der im openapi.yaml
definierten Struktur entspricht. Dieser Test wird zunächst zu 100% scheitern, und die Aufgabe des Entwicklungsteams wird darin bestehen, diese Tests zu löschen.
Derzeit wartet ein Konzept auf Feedback. Die Idee ist, die im OpenAPI.YAML definierten Objekte als Modelle zu definieren, die zwischen den verschiedenen Modulen übergeben werden. Dies entspricht den Programmierern, um mit definierten Objekten zu interagieren, anstatt lose definierte JSON-Objekte. Angesichts der Art von JavaScript -Programmierern, die mit ihren eigenen Bootstrap -Parametern arbeiten möchten, funktioniert dieses Konzept möglicherweise nicht. Halten Sie dies hier für zukünftige Diskussionen und Feedback.