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 -jar {path_to_jar_file} generate -g nodejs-express-server -i {openapi yaml/json file} -o {target_directory_where_the_app_will_be_installed}
如果您沒有JAR,或者不想從本地計算機運行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程序員的性質,此概念可能不起作用。將其保留在此處以供將來的討論和反饋。