API는 초콜릿, 금 또는 레고로 만든 회사 제품의 매력적인 이미지를 만듭니다. 참조 구현은 OpenAI (Dall-E, GPT-3)를 기반으로합니다.
초콜릿 또는 레고로 만든 놀랍고 시각적으로 매력적인 회사 제품이 있습니다.
OpenAI의 이미지 및 텍스트 생성 기능에서 영감을 얻은이 API는 제품의 이미지를 생성하고, 회사는 가장 잘 알려져 있으며, 금, 초콜릿, 레고 또는 기타 자료로 전환합니다.
생성 된 API 문서를 따르고 "Postman에서 실행"버튼을 클릭하십시오.
이 서버는 OpenAPI 생성기 프로젝트를 사용하여 생성되었습니다. Code Generator와 생성 된 코드를 사용하면 API 계약이 프로젝트의 앵커이자 정의기 인 API 우선 태도로 시스템을 개발할 수 있으며 코드와 비즈니스 로그는 용어를 완료하고 준수하는 것을 목표로합니다. API 계약.
nodejs> = 10.6
NPM> = 6.10.0
이 코드는 Mac에 작성되었으므로 모든 것이 Linux 기반 컴퓨터에서 원활하게 작동한다고 가정합니다. 그러나 Windows 기반 머신 에서이 라이브러리를 실행하지 않을 이유가 없습니다. OS 관련 문제가있는 경우 문제를 열면 해결됩니다.
OpenApi 생성기를 사용하여 응용 프로그램을 생성합니다. Java (1.8+)가 있다고 가정하고 응용 프로그램을 생성 할 항아리가 있다고 가정합니다. 실행 : 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 you는 항아리가 없거나 로컬 컴퓨터에서 Java를 실행하고 싶지 않은 경우 OpenApitools 페이지의 지침을 따르십시오. 온라인, Docker 및 기타 다양한 방법으로 스크립트를 실행할 수 있습니다.
정의한 생성 된 디렉토리로 이동하십시오. 완전히 작동하는 Nodejs-Expressjs 서버가 귀하를 기다리고 있습니다. 이것은 중요합니다 - 코드는 변경하고 업데이트하는 것입니다! config.js를보고 설정이 정상인지 확인하십시오. 서버는 포트 3000에서 실행되며 파일은 새 디렉토리 'uploaded_files'에 업로드됩니다.
서버는 /api/openapi.yaml 아래에있는 OpenApi.yaml 파일을 기반으로합니다. 이것은 앱을 생성하는 데 사용한 파일이 아닙니다. I. 경로 개체 내부에 정의 된 application/json
컨텐츠 바디가있는 경우 생성은 OpenAPI 문서의 구성 요소/스키마 섹션으로 이동했습니다. II. 모든 프로세스에는 새로운 요소가 추가되어 있습니다 x-eov-operation-handler: controllers/PetController
III. OperationID를 메소드로 변환하는 Java 응용 프로그램과 해당 메소드를 호출하기 위해 동일한 프로세스를 수행하는 NodeJS 스크립트가 있습니다. 둘 다이 방법을 camelCase
로 변환하고 있지만 불일치가있을 수 있습니다. OperationID 이름에주의를 기울이고 controllers
및 services
디렉토리에 표시되어 있는지 확인하십시오.
시간을내어 응용 프로그램의 구조를 이해하십시오. 버그가있을 수 있으며 귀하의 기대를 충족시키지 못하는 설정과 비즈니스 로그가있을 수 있습니다. 이 솔루션을 버리고 다른 것을 찾는 대신 생성 된 코드가 작동하도록 할 수 있는지 확인하십시오. 설명을 짧게 유지하려면 (보다 자세한 설명이 따릅니다) : 응용 프로그램은 index.js에 대한 호출로 시작합니다 (나중에 DB를 연결하는 곳). Express.js와 OpenApi-Validator가 시작되는 ExpressServer.js를 호출합니다. 이것은 중요한 파일입니다. 배우십시오. 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의 응답 코드를 반환합니다.
루트 디렉토리에는 (package.json, config.js 및 로그 파일 외에) :
logger.js- 프로젝트의 로거를 정의합니다. 이 프로젝트는 Winston을 사용하지만이 파일의 목적은 사용자가 자신의 로거 동작을 변경하고 수정할 수 있도록하는 것입니다.
Index.js- 이것은 프로젝트의 '기본'파일이며 여기에서 응용 프로그램을 시작합니다. 이것은 매우 짧고 간결한 파일이며,이 짧은 파일에서 시작하는 아이디어는 나머지 코드에 영향을 미치지 않고 다른 매개 변수 (구성 및/또는 로거 변경)로 서버를 시작하는 사용 사례를 허용하는 것입니다.
ExpressServer.js- Express.js 서버의 핵심. 여기에서는 Express 서버가 OpenAPI Validator, OpenAPI UI 및 서버를 시작하는 데 필요한 기타 라이브러리와 함께 초기화되는 곳입니다. 우리가 외부 링크를 추가하고 싶다면 그것이 갈 곳입니다. 당사의 프로젝트는 라우팅 프로세스의 첫 번째 단계 역할을하는 Express-Openapi-Validator 라이브러리를 사용합니다. openapi.yaml
파일에 정의 된 경로로 지시되는 요청은이 프로세스에 의해 잡히고 매개 변수이며 스키마에 대해 검증됩니다. . 이 검증의 성공적인 결과는 요청에 추가 된 새로운 'OpenApi'객체입니다. 요청 된 경로가 OpenApi.yaml 파일의 일부가 아닌 경우, 유효성 검사기는 요청을 무시하고 Express 서버의 흐름을 아래로 전달합니다.
OpenApi.yaml- 이 서버가 준수 할 OpenApi 계약입니다. 이 파일은 CodeGen을 사용하여 생성되었으며 외부 모델/스키마에 대한 참조가없는 API 게이트웨이를 실행하는 데 필요한 모든 것을 포함해야합니다.
현재 단일 파일 :
OpenApirouter.js- 이것은 백엔드 코드로의 라우팅이 발생하는 곳입니다. 요청 객체에 openapi
객체가 포함 된 경우 다음 값 ( openapi.yaml
파일의 일부)을 선택합니다. 이러한 변수는 각각 컨트롤러 및 서비스 디렉토리의 파일/클래스 이름입니다. 요청의 작동도 추출됩니다. OperationID는 컨트롤러의 메소드 및 CodeGen 프로세스의 일부로 생성 된 서비스입니다. 라우팅 프로세스는 요청 및 응답 객체를 컨트롤러로 보내어 요청에서 예상 변수를 추출하여 서비스에서 처리하도록 보냅니다. 서비스에서 응답을 발신자에게 반환합니다.
요청을 검증하고이를 API 게이트웨이에 속한 후 요청을 controller
로 보냅니다. 여기서 변수와 매개 변수가 요청에서 추출되어 처리를 위해 관련 service
로 전송됩니다. controller
service
의 응답을 처리하고 사용자에게 다시 전송 될 적절한 HTTP 응답을 구축합니다.
index.js- 이 프로젝트를 위해 생성 된 모든 컨트롤러를로드하고 openapiRouter.js
에서 동적으로 사용하도록 내 보냅니다. 컨트롤러를 사용자 정의하려면 여기에서 컨트롤러에 링크하고 CodeGen 이이 파일을 다시 작성하지 않도록하는 것이 좋습니다.
Controller.js- 생성 된 컨트롤러의 핵심 프로세서. 생성 된 컨트롤러는 필요한 변수와 인수를 구문 분석하는 비즈니스 논리를 요청하고 다시 전송 될 HTTP 응답을 구축하기 위해 Controller.js
를 참조하여 가능한 한 슬림하고 일반적인 상태로 설계되었습니다. Controller.js
는 정적 메소드가있는 클래스입니다.
.js- 자동 생성 코드, 모든 작업을 처리합니다. 컨트롤러는 요청을 보내는 서비스 클래스로 구성된 클래스입니다. openapi.yaml
에 의해 정의 된 모든 요청에는 OperationId가 있습니다. 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을 반환합니다. 404 그렇지 않은 경우.
RoutingTests.js- openapi.yaml
에 정의 된 모든 엔드 포인트를 통해 실행되며 서버로 전송하라는 더미 요청을 구성합니다. 응답 코드가 200임을 확인합니다.이 시점에서 XML 또는 FormData 실패가 포함 된 요청은 현재 라우터에서 지원되지 않습니다.
추가 엔드 포인트 스테스트 .js- OpenApi.yaml 범위 외부에서 정의되는 모든 엔드 포인트에 대한 테스트 파일. 이 엔드 포인트가 성공적인 200 응답을 반환하는지 확인합니다.
발송 된 모든 요청의 응답이 openapi.yaml
에 정의 된 구조를 준수 해야하는지 확인하기 위해 향후 테스트를 작성해야합니다. 이 테스트는 처음에는 100% 실패하며 개발 팀의 임무는 이러한 테스트를 정리하는 것입니다.
현재 피드백을 기다리는 개념. 아이디어는 OpenApi.yaml에 객체를 정의하는 것입니다. 이것은 프로그래머가 느슨하게 정의 된 JSON 객체보다는 정의 된 객체를 사용하여 상호 작용하도록 준수합니다. 자체 부트 스트랩 매개 변수로 작업하려는 JavaScript 프로그래머의 특성을 감안할 때이 개념은 작동하지 않을 수 있습니다. 미래의 토론과 피드백을 위해 이것을 여기에 두십시오.