API创建由巧克力,黄金或乐高乐高乐高的公司产品的吸引力图像。参考实现基于OpenAI(DALL-E,GPT-3)。
有一些由巧克力或乐高玩具制成的令人赞叹的,视觉上吸引人的公司产品
受Openai的图像和文本生成功能的启发,该API生成了产品的图像,公司最著名并将其变成黄金,巧克力,乐高玩具或任何其他材料。
关注生成的API文档,然后单击“邮递员运行”按钮
该服务器是使用OpenAPI Generator项目生成的。 代码生成器及其生成的代码允许您以API-Fir的态度开发系统,API合同是您项目的锚点和定义器,您的代码和商业逻辑旨在完成并符合条款API合同。
nodejs> = 10.6
npm> = 6.10.0
该代码写在Mac上,因此假设所有人都应该在基于Linux的计算机上平稳工作。但是,没有理由不在基于Windows的计算机上运行此库。如果您发现与OS相关的问题,请打开问题,并将解决。
使用OpenAPI Generator生成您的应用程序:假设您具有Java(1.8+),并且具有生成应用程序的JAR,运行: 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}
没有罐子,或者不想从本地计算机运行Java,请按照OpenApitools页面上的说明进行操作。您可以在线运行脚本,Docker和其他各种方式。
转到您定义的生成目录。有一台功能齐全的nodejs-expressjs服务器在等您。这很重要 - 代码是您要更改和更新的代码!查看config.js,看看您的设置还可以 - 服务器将在端口3000上运行,并且文件将上传到新的目录“ uploaded_files”。
该服务器将基于位于 /pi /openapi.yaml下的OpenApi.yaml文件。这与您用来生成应用程序的文件完全相同:I。如果您具有路径对象中定义的application/json
Contentboby,则生成物将将其移至OpenAPI文档的“组件/架构”部分。 ii。每个过程都有一个新的元素添加了-X x-eov-operation-handler: controllers/PetController
,将调用引导到该文件。 iii。我们有一个Java应用程序,将操作ID转换为方法,而NodeJS脚本进行了相同的过程来调用该方法。两者都将方法转换为camelCase
,但可能具有差异。请注意操作ID名称,并查看它们在controllers
和services
目录中的代表。
花时间了解应用程序的结构。可能会有错误,并且可能有设置和商业逻辑不满意您的期望。而不是倾倒此解决方案并寻找其他东西 - 查看是否可以使生成的代码适合您。为了简短说明(将以下更详细的说明):应用程序以拨打index.js的呼叫开始(这是您稍后将插入DB的地方)。它调用Expresserver.js,这是Express.js和OpenApi-Validator开始的位置。这是一个重要的文件。学习。所有对OpenAPI.YAML文档中配置的端点的调用都转到controllers/{name_of_tag_which_the_operation_was_associated_with}.js
,这是一个很小的方法。 services/{name_of_tag_which_the_operation_was_associated_with}.js
业务逻辑都在于controllers/Controller.js
。
一旦您了解将会发生的事情,请启动应用程序并确保所有内容都按预期运行:
npm start
(假设没有对config.js进行更改)
API文档,并检查可用端点:http:// localhost:3000/api-docs/。到
下载OpenAPI.YAML文档:http:// localhost:3000/OpenAPI。
OpenAPI文档中定义的端点的每个调用都将返回200和请求中发送的所有参数和对象的列表。
需要安全性的端点需要对安全处理程序进行配置,然后才能返回成功的响应。在这一点上,他们将返回401的响应代码。
在根目录中,我们有(boxpake.json,config.js和log Files):
logger.js-我们在哪里定义项目的记录仪。该项目使用Winston,但该文件的目的是使用户可以更改和修改自己的记录器行为。
index.js-这是项目的“主”文件,从这里开始启动应用程序。这是一个非常简洁的文件,从此简短文件启动的想法是允许使用不同参数(更改配置和/或记录器)启动服务器的用途,而不会影响代码的其余部分。
expresserver.js- express.js服务器的核心。这是Express Server的初始化,以及OpenAPI验证器,OpenAPI UI以及启动我们的服务器所需的其他库。如果我们想添加外部链接,那就是它们要去的地方。我们的项目使用Express-openapi-validator库,该库是路由过程中的第一步 - 针对openapi.yaml
中定义的路径的请求。YAML文件被此过程捕获,并且它的参数和身体查体对架构进行了验证。 。此验证的成功结果将是添加到请求中的新“ OpenAPI”对象。如果请求的路径不是OpenAPI.YAML文件的一部分,则验证器会忽略请求,并按照Express Server的流量进行操作。
OpenAPI.YAML-这是该服务器将遵守的OpenAPI合同。该文件是使用CodeGen生成的,应包含运行API网关所需的一切 - 没有引用外部模型/架构。
当前一个文件:
OpenApirouter.js-这是通往我们后端代码的路由的地方。如果请求对象包含一个openapi
对象,则将拾取以下值(是openapi.yaml
文件的一部分):“ X-openapi-router-controller”和“ X-openapi-router-service”。这些变量分别是控制器和服务目录中的文件/类的名称。还提取了请求的操作。 OperationID是控制器中的一种方法,也是作为CodeGen进程的一部分生成的服务。路由过程将请求和响应对象发送给控制器,该对象将从请求中提取预期变量,并将其发送到由服务处理,并将响应从服务返回到呼叫者。
验证请求并确保属于我们的API网关后,我们将请求发送到controller
,在该控制器中,将变量和参数从请求中提取并发送到相关service
以进行处理。 controller
处理service
的响应,并构建适当的HTTP响应,以发送回用户。
index.js-加载为该项目生成的所有控制器,并导出将其导出由openapiRouter.js
动态使用。如果您想自定义控制器,建议您在此处链接到控制器,并确保CodeGen不会重写此文件。
Controller.js-生成控制器的核心处理器。生成的控制器旨在尽可能苗条和通用,引用Controller.js
。 Controller.js
是具有静态方法的类。
.js-自动生成的代码,处理所有操作。控制器是由将将请求发送到的服务类构建的类。 openapi.yaml
定义的每个请求都有一个操作ID。操作ID是将被调用的方法的名称。每种方法都会收到请求和响应,并致电Controller.js
处理请求和响应,并添加应要求进行实际业务逻辑处理的服务方法。
这是API网关结束的地方,并且您的应用程序的唯一业务逻辑开始。OpenAPI.YAML中的每个端点都有一个变量的“ X- openapi.yaml
-Router-Service”,这是服务类的名称。生成。端点的操作是将调用的方法的名称。生成的代码通过尝试/捕获子句提供了一个简单的承诺。成功的操作以呼叫通用Service.js
的呼叫结束,以构建成功的响应(有效载荷和响应代码),并且失败将调用通用Service.js
用错误对象和相关的响应代码构建响应。建议将服务自动生成一次,然后在初始构建后手动添加方法。
index.js-加载为该项目生成的所有服务,并导出将其导出由openapiRouter.js
动态使用。如果您想自定义服务,建议您在此处链接到控制器,并确保Codegen不会重写此文件。
service.js-一个实用程序类,此时非常简单又薄,具有两种静态方法,用于构建成功和失败的响应对象,从而在服务操作中结果。默认响应代码为200,失败为500。建议在相关时发送更准确的响应代码并覆盖这些默认值。
.js-自动生成的代码,为openapi.yaml
中定义的每个操作ID提供了一个存根的承诺。每种方法都会收到openapi.yaml
文件中定义的变量,并在try/catch子句中包装承诺。该承诺在呼叫Service.js
实用程序类中既可以解决成功又失败,以构建将发送回控制器,然后将其发送给该端点的呼叫者的适当响应。
Servertests.js-基本的服务器验证测试,检查服务器是否已升起,呼叫openapi.yaml
文件范围内的端点呼叫200,该呼叫呼叫到外面的路径(如果存在),则返回200 404如果不是。
routingTests.js-贯穿openapi.yaml
中定义的所有端点,并构造了一个虚拟请求,以发送到服务器。确认响应代码为200。在这一点上,包含XML或FormData失败的请求 - 目前在路由器中不支持它们。
附加端点stests.js-用于OpenApi.yAML范围外所有端点的测试文件。确认这些端点返回成功的200响应。
应编写未来的测试,以确保发送的每个请求的响应应符合openapi.yaml
中定义的结构。该测试最初将100%失败,开发团队的工作将是清除这些测试。
目前,一个等待反馈的概念。这个想法是要使OpenAPI.YAML中定义的对象作为模型,这些模型在不同的模块之间传递。这将使程序员使用定义的对象进行交互,而不是松散定义的JSON对象。鉴于想使用自己的自举参数工作的JavaScript程序员的性质,此概念可能不起作用。将其保留在此处以供将来的讨论和反馈。