API для создания привлекательных изображений продуктов компании из шоколада, золота или LEGO. Справочная реализация основана на OpenAI (Dall-E, GPT-3).
Есть несколько удивительных, визуально привлекательных продуктов компании из шоколада или LEGO
Вдохновленный возможностями генерации изображения и текста Openai, этот API генерирует изображения продуктов, компании наиболее известны и превращают их в золото, шоколад, LEGO или любой другой материал.
Следите за сгенерированной документацией API и нажмите кнопку «Запустить в почтальстве»
Этот сервер был сгенерирован с использованием проекта Generator OpenAPI. Генератор кода, и его сгенерированный код позволяет вам разрабатывать вашу систему с помощью API-первого отношения, где контракт API является якорем и определением вашего проекта, а ваш код и бизнес-логик направлены на завершение и соблюдение условий в Контракт API.
Nodejs> = 10,6
NPM> = 6.10.0
Код был записан на Mac, поэтому предполагая, что все должно работать плавно на компьютерах на основе Linux. Тем не менее, нет причин не запускать эту библиотеку на машинах на основе Windows. Если вы найдете проблему, связанную с ОС, откройте проблему, и она будет решена.
Используйте генератор OpenAPI для генерации вашего приложения: при условии, что у вас есть 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".
Сервер будет основываться на файле openapi.yaml, который расположен под /апи /openapi.yaml. Это не тот же файл, который вы использовали для генерации приложения: I. Если у вас есть application/json
Content Codent, который был определен внутри объекта Path - Generate переместит его в раздел компонентов/схемы документа OpenAPI. II В каждом процессе добавлен новый элемент- x-eov-operation-handler: controllers/PetController
который направляет вызов в этот файл. Iii. У нас есть приложение Java, которое переводит операцию на метод, и сценарий Nodejs, который выполняет тот же процесс, чтобы вызвать этот метод. Оба преобразуют метод в camelCase
, но могут иметь несоответствие. Пожалуйста, обратите внимание на имена OperationID и увидите, что они представлены в каталогах controllers
и services
.
Потратьте время, чтобы понять структуру приложения. Могут быть ошибки, и могут быть настройки и бизнес-логик, которые не соответствуют вашим ожиданиям. Вместо того, чтобы сбрасывать это решение и искать что -то еще - посмотрите, сможете ли вы заставить сгенерированный код работать для вас. Чтобы сохранить объяснение коротким (более подробное объяснение будет следовать): приложение начинается с вызова index.js (именно здесь вы подключите БД позже). Он вызывает ExpressServer.js, где начинаются Express.js и OpenAPI-Validator. Это важный файл. Узнайте это. Все вызовы в конечные точки, которые были настроены в документе openapi.yaml Перейдите к controllers/{name_of_tag_which_the_operation_was_associated_with}.js
, который является очень небольшим методом. Весь бизнес -логик заключается в controllers/Controller.js
, а оттуда - в services/{name_of_tag_which_the_operation_was_associated_with}.js
.
Как только вы поняли, что произойдет , запустите приложение и убедитесь, что все работает так, как и ожидалось:
npm start
(При условии, что не было внесено никаких изменений в config.js)
Документация API и проверить доступные конечные точки: http: // localhost: 3000/api-docs/. К
Загрузите документ OpenApi.yaml: http: // localhost: 3000/openapi.
Каждый вызов в конечную точку, которая была определена в документе OpenAPI, вернет 200 и список всех параметров и объектов, которые были отправлены в запросе.
Конечные точки, которые требуют безопасности, должны быть настроены обработчики безопасности, прежде чем они смогут вернуть успешный ответ. На этом этапе они вернут код ответа 401.
В корневом каталоге, который у нас есть (помимо package.json, config.js и файлов журнала):
logger.js - где мы определяем регистратор для проекта. Проект использует Уинстон, но цель этого файла состоит в том, чтобы позволить пользователям изменять и изменять свое собственное поведение регистрации.
index.js - это «основной» файл проекта, и отсюда мы запускаем приложение. Это очень короткий и краткий файл, и идея запуска из этого короткого файла состоит в том, чтобы разрешить использование каменов запуска сервера с различными параметрами (изменение конфигурации и/или регистрации), не влияя на остальную часть кода.
ExpressServer.js - ядро сервера Express.js. Именно здесь инициализируется сервер Express вместе с валидатором OpenAPI, интерфейсом openAPI и другими библиотеками, необходимыми для запуска нашего сервера. Если мы хотим добавить внешние ссылки, вот куда они пойдут. В нашем проекте используется библиотека Express-Openapi-validator, которая действует как первый шаг в процессе маршрутизации-запросы, направленные на пути, определяемые в файле openapi.yaml
, пойманы этим процессом, и его параметры и кузов подтверждаются против схемы. Полем Успешным результатом этой проверки станет новый объект «OpenAPI», добавленный в запрос. Если запрашиваемый путь не является частью файла openapi.yaml, валидатор игнорирует запрос и передает его, как есть, вниз по потоку экспресс -сервера.
openapi.yaml - это контракт OpenAPI, которому этот сервер будет соответствовать. Файл был сгенерирован с использованием CodeGen и должен содержать все, что необходимо для запуска шлюза API - нет ссылок на внешние модели/схемы.
В настоящее время один файл:
openapirouter.js - вот где происходит маршрутизация нашего кода по всему концу. Если объект запроса включает объект openapi
, он поднимает следующие значения (которые являются частью файла openapi.yaml
): «X-Openapi-Router-Controller» и «X-Openapi-Router-Service». Эти переменные являются именами файлов/классов в каталогах контроллеров и сервисов соответственно. Операция запроса также извлечена. Операция - это метод контроллера и служба, которая была сгенерирована как часть процесса CodeGen. Процесс маршрутизации отправляет объекты запроса и ответа контроллеру, который извлекает ожидаемые переменные из запроса и отправляет его для обработки службой, возвращая ответ из Сервиса в вызывающий абонент.
После проверки запроса и обеспечения его принадлежности к нашему шлюзу API мы отправляем запрос controller
, где переменные и параметры извлекаются из запроса и отправляются в соответствующую service
для обработки. controller
обрабатывает ответ от service
и создает соответствующий HTTP -ответ, который будет отправлен обратно пользователю.
index.js - Загрузите все контроллеры, которые были сгенерированы для этого проекта, и экспортировать их для динамического использования openapiRouter.js
. Если вы хотите настроить свой контроллер, рекомендуется ссылаться на свой контроллер здесь и убедиться, что CodeGen не переписывает этот файл.
Controller.js - основной процессор сгенерированных контроллеров. Сгенерированные контроллеры предназначены для того, чтобы быть максимально тонкими и общими, насколько это возможно, ссылаясь на Controller.js
для бизнес -логики анализа необходимых переменных и аргументов из запроса, а также для создания ответа HTTP, который будет отправлен обратно. Controller.js
- это класс со статическими методами.
.js - Автопогенерированный код, обработка всех операций. Контроллер - это класс, который построен с классом услуг, на которые он будет отправлять запрос. Каждый запрос, определенный openapi.yaml
, имеет OperationId. Операция - это название метода, который будет вызван. Каждый метод получает запрос и ответ, и вызывает Controller.js
для обработки запроса и ответа, добавляя метод обслуживания, который следует вызвать для фактической обработки бизнес-логики.
Вот где заканчивается шлюз API, и уникальная бизнес-логика вашего приложения начинается. Каждая конечная точка в openapi.yaml
имеет переменную «x-openapi-router-service», которая является названием класса обслуживания, который является сгенерирован. Операция конечной точки - это название метода, который будет вызван. Сгенерированный код дает простое обещание с пунктом Try/Catch. Успешная операция заканчивается вызовом в Generic Service.js
для создания успешного ответа (полезной нагрузки и кода ответа), и сбой вызвать generic Service.js
для создания ответа с объектом ошибки и соответствующим кодом ответа. Рекомендуется, чтобы службы были созданы автоматически один раз, и после начальной сборки сборки добавить вручную.
index.js - Загрузите все услуги, которые были сгенерированы для этого проекта, и экспортировать их для динамического использования openapiRouter.js
. Если вы хотите настроить свой сервис, рекомендуется ссылаться на свой контроллер здесь и убедиться, что CodeGen не переписывает этот файл.
Service.js - утилита, очень простой и тонкий на этом этапе, с двумя статическими методами создания объекта ответа для успешных и неудачных результатов в операции обслуживания. Код ответа по умолчанию составляет 200 для успеха и 500 для сбоя. Рекомендуется отправлять более точные коды ответов и переопределить эти значения по умолчанию, когда это уместно.
.js - Автопогенерированный код, обеспечивающий обещание заглушки для каждой операции, определенной в openapi.yaml
. Каждый метод получает переменные, которые были определены в файле openapi.yaml
, и завершает обещание в предложении Try/Catch. Обещание разрешает как успех, так и неудачу при вызове с утилитом Service.js
для создания соответствующего ответа, который будет отправлен обратно в контроллер, а затем вызывающему этой конечной точке.
Servertests.js - базовые проверки проверки сервера, проверяя, что сервер истекает, что вызов в конечную точку в рамках файла openapi.yaml
возвращает 200, что вызов по пути за пределами этой области возвращает 200, если он существует, и 404, если нет.
RoutingTests.js - выполняет все конечные точки, определенные в openapi.yaml
, и создает фиктивный запрос на отправку на сервер. Подтверждает, что код ответа составляет 200. На этом этапе запросы, содержащие сбой XML или FormData - в настоящее время они не поддерживаются в маршрутизаторе.
ExtraNdPointStests.js - тестовый файл для всех конечных точек, которые определены за пределами сферы OpenApi.yaml. Подтверждает, что эти конечные точки возвращают успешный ответ 200.
Будущие тесты должны быть записаны, чтобы гарантировать, что ответ на каждый отправленный запрос должен соответствовать структуре, определенной в openapi.yaml
. Этот тест изначально пройдет на 100%, и работа команды разработчиков будет заключаться в том, чтобы очистить эти тесты.
В настоящее время концепция, ожидающая обратной связи. Идея состоит в том, чтобы определить объекты в OpenApi.yaml, как модели, которые передаются между различными модулями. Это будет соответствовать программистам взаимодействовать с использованием определенных объектов, а не слабо определенных объектов JSON. Учитывая природу программистов JavaScript, которые хотят работать со своими собственными загрузочными параметрами, эта концепция может не сработать. Сохраняя это здесь для будущего обсуждения и обратной связи.