OpenAPI Suite - パート 2
コミュニティの皆さん、こんにちは。
パート 1 では、すべてのパッケージ、使用されているライブラリ、および REST サービスについて説明しました。
次は、コンバーターサービスとバリデーターサービスについて詳しく説明したいと思います。
OpenAPI-Suite はデフォルトで、仕様バージョンが 3.0 未満である場合に HTTP リクエストを converter.swagger.io に送信し、別の HTTP リクエストを validator.swagger.io に送信して仕様ドキュメントの構造を単純化します。
オンラインユーティリティの使用は便利ではありますが、場合によっては独自のコンバーターとバリデーターのインスタンスを使用する方が便利な場合もあります。 たとえば、OpenAPI-Suite が ObjectScript 開発者向けに組織のサーバーに提供されている場合、外部サービスへのリクエストを回避する方が好ましいことがあります(プライバシーやリクエストレートの制限を回避するため)。
以下を実行してください。
docker run -d -p 8085:8080 --name swagger-converter swaggerapi/swagger-converter:latest
docker run -d -p 8086:8080 --name swagger-validator-v2 swaggerapi/swagger-validator-v2:latestブラウザで http://localhost:8085/ と http://localhost:8086/ を開くと、これらのサービスの UI にアクセスできます。
ローカルサービスを使用するために OpenAPI-Suite を構成する必要があるため、IRIS ターミナルを開いて、以下のグローバルを設定します。
^swaggervalidator("ValidatorURL")="http://" ^swaggervalidator("Port")=^swaggerconverter("ConverterURL")="http://" ^swaggerconverter("Port")= では、これを Docker-Compose に統合して、自動的に行う方法を見てみましょう。
まず、post-start スクリプト(init_openapisuite.sh)を準備します。
#!/bin/bash
openapi_suite() {
iris session $ISC_PACKAGE_INSTANCENAME -U IRISAPP <<- END
Set^swaggerconverter("ConverterURL") = "${CONVERTER_URL:-converter.swagger.io}"Set^swaggerconverter("Port") = "${CONVERTER_PORT:-80}"Set^swaggervalidator("ValidatorURL") = "${VALIDATOR_URL:-validator.swagger.io}"Set^swaggervalidator("Port") = "${VALIDATOR_PORT:-80}"Halt
END
}
openapi_suite
exit 0このスクリプトは iris-main プログラムによって実行されます。 スクリプトに「execute」権限があることを確認してください(chmod +x init_openapisuite.sh)。
次に、以下のように docker-compose ファイルを作成します。
version: '3.6'
services:
iris:
build:
context: .
dockerfile: Dockerfile
restart: always
command: --check-caps false --ISCAgent false -a /home/irisowner/irisdev/init_openapisuite.sh
environment:
- CONVERTER_URL=http://swagger-converter
- CONVERTER_PORT=8080
- VALIDATOR_URL=http://swagger-validator-v2
- VALIDATOR_PORT=8080
ports:
- 1972
- 52796:52773
- 53773
volumes:
- ./:/home/irisowner/irisdev
swagger-converter:
image: swaggerapi/swagger-converter:latest
restart: always
# optional, openapi-suite don't need port exposed
ports:
- 8085:8080
swagger-validator-v2:
image: swaggerapi/swagger-validator-v2:latest
restart: always
# optional, openapi-suite don't need port exposed
ports:
- 8086:8080すべてのリソースはこちらのリポジトリにあります。すでにクローンした場合は、「git pull」を実行して最新のアップデートを取得してください。 すると、以下のコマンドを使って、すべてのサービスとともに OpenAPI-Suite をローカルで起動できます。
docker-compose --file docker-compose-with-swagger.yml up -d; or for compose plugin users; docker compose --file docker-compose-with-swagger.yml up -d
これは単なる 1 つのアイデアに過ぎませんが、OpenAPI-Suite 実装が十分に完全になれば、おそらく Swagger 3.0 のオンライン ObjectScript コード生成サービスを提供するために使用できるようになる可能性があります。 現時点では、アプリケーションは dc demo server にホストされているため、openapi-suite 用の小さなクライアントを作るアイデアを得ました(これも openapi-suite 自体で生成されたものです! ). つまり、すべてのツールをローカルにインストールしなくても、リモートコード生成を利用することが可能です。
zpm "install openapi-suite-client"
; remote openapi-suite REST service url : Set server = "https://openapisuite.demo.community.intersystems.com/openapisuite"; Specification could be an URL, filepath or a stream.Set specification = "https://petstore3.swagger.io/api/v3/openapi.json"; Package name for generated classes.Set packageName = "petstoreclient"; available type : ; - "client" : to generate http client classes. ; - "production" : to generate production client classes.; - "rest" : to generate REST server classesSet type = "client"; Request and Install the generated code.Set sc = ##class(dc.openapi.suite.client.RemoteCodeGen).Generate(specification, packageName, type, server)IRISAPP>Set sc = ##class(dc.openapi.suite.client.RemoteCodeGen).Generate(specification, packageName, type, server)
Load started on 02/06/202320:49:19
Loading file /usr/irissys/mgr/Temp/Lgm86wQGGdNSiQ.xml as xml
Imported class: petstoreclient.HttpClient
Imported class: petstoreclient.model.Address
Imported class: petstoreclient.model.ApiResponse
Imported class: petstoreclient.model.Category
Imported class: petstoreclient.model.Customer
Imported class: petstoreclient.model.Order
Imported class: petstoreclient.model.Pet
Imported class: petstoreclient.model.Tag
Imported class: petstoreclient.model.User
Imported class: petstoreclient.model.spec
Imported class: petstoreclient.requests.addPet
Imported class: petstoreclient.requests.createUser
Imported class: petstoreclient.requests.createUsersWithListInput
Imported class: petstoreclient.requests.deleteOrder
Imported class: petstoreclient.requests.deletePet
Imported class: petstoreclient.requests.deleteUser
Imported class: petstoreclient.requests.findPetsByStatus
Imported class: petstoreclient.requests.findPetsByTags
Imported class: petstoreclient.requests.getInventory
Imported class: petstoreclient.requests.getOrderById
Imported class: petstoreclient.requests.getPetById
Imported class: petstoreclient.requests.getUserByName
Imported class: petstoreclient.requests.loginUser
Imported class: petstoreclient.requests.logoutUser
Imported class: petstoreclient.requests.placeOrder
Imported class: petstoreclient.requests.updatePet
Imported class: petstoreclient.requests.updatePetWithForm
Imported class: petstoreclient.requests.updateUser
Imported class: petstoreclient.requests.uploadFile
Imported class: petstoreclient.responses.GenericResponse
Imported class: petstoreclient.responses.addPet
Imported class: petstoreclient.responses.createUser
Imported class: petstoreclient.responses.createUsersWithListInput
Imported class: petstoreclient.responses.deleteOrder
Imported class: petstoreclient.responses.deletePet
Imported class: petstoreclient.responses.deleteUser
Imported class: petstoreclient.responses.findPetsByStatus
Imported class: petstoreclient.responses.findPetsByTags
Imported class: petstoreclient.responses.getInventory
Imported class: petstoreclient.responses.getOrderById
Imported class: petstoreclient.responses.getPetById
Imported class: petstoreclient.responses.getUserByName
Imported class: petstoreclient.responses.loginUser
Imported class: petstoreclient.responses.logoutUser
Imported class: petstoreclient.responses.placeOrder
Imported class: petstoreclient.responses.updatePet
Imported class: petstoreclient.responses.updatePetWithForm
Imported class: petstoreclient.responses.updateUser
Imported class: petstoreclient.responses.uploadFile
Compiling 49 classes
Compiling class petstoreclient.HttpClient
Compiling class petstoreclient.model.Address
Compiling class petstoreclient.model.Category
Compiling class petstoreclient.model.ApiResponse
Compiling class petstoreclient.model.Customer
Compiling class petstoreclient.model.Order
Compiling class petstoreclient.model.Tag
Compiling class petstoreclient.model.Pet
Compiling class petstoreclient.model.spec
Compiling class petstoreclient.requests.addPet
Compiling class petstoreclient.model.User
Compiling class petstoreclient.requests.createUser
Compiling class petstoreclient.requests.deleteOrder
Compiling class petstoreclient.requests.createUsersWithListInput
Compiling class petstoreclient.requests.deleteUser
Compiling class petstoreclient.requests.deletePet
Compiling class petstoreclient.requests.findPetsByStatus
Compiling class petstoreclient.requests.findPetsByTags
Compiling class petstoreclient.requests.getInventory
Compiling class petstoreclient.requests.getOrderById
Compiling class petstoreclient.requests.getPetById
Compiling class petstoreclient.requests.getUserByName
Compiling class petstoreclient.requests.loginUser
Compiling class petstoreclient.requests.logoutUser
Compiling class petstoreclient.requests.updatePet
Compiling class petstoreclient.requests.placeOrder
Compiling class petstoreclient.requests.updateUser
Compiling class petstoreclient.requests.updatePetWithForm
Compiling class petstoreclient.requests.uploadFile
Compiling class petstoreclient.responses.GenericResponse
Compiling class petstoreclient.responses.createUser
Compiling class petstoreclient.responses.addPet
Compiling class petstoreclient.responses.deleteOrder
Compiling class petstoreclient.responses.createUsersWithListInput
Compiling class petstoreclient.responses.deletePet
Compiling class petstoreclient.responses.deleteUser
Compiling class petstoreclient.responses.findPetsByTags
Compiling class petstoreclient.responses.findPetsByStatus
Compiling class petstoreclient.responses.getOrderById
Compiling class petstoreclient.responses.getInventory
Compiling class petstoreclient.responses.getPetById
Compiling class petstoreclient.responses.getUserByName
Compiling class petstoreclient.responses.logoutUser
Compiling class petstoreclient.responses.loginUser
Compiling class petstoreclient.responses.placeOrder
Compiling class petstoreclient.responses.updatePet
Compiling class petstoreclient.responses.updatePetWithForm
Compiling class petstoreclient.responses.updateUser
Compiling class petstoreclient.responses.uploadFile
Compiling routine petstoreclient.HttpClient.1
Compiling routine petstoreclient.model.Address.1
Compiling routine petstoreclient.model.ApiResponse.1
Compiling routine petstoreclient.model.Category.1
Compiling routine petstoreclient.model.Customer.1
Compiling routine petstoreclient.model.Order.1
Compiling routine petstoreclient.model.Tag.1
Compiling routine petstoreclient.model.Pet.1
Compiling routine petstoreclient.requests.addPet.1
Compiling routine petstoreclient.model.User.1
Compiling routine petstoreclient.requests.createUser.1
Compiling routine petstoreclient.requests.createUsersWithListInput.1
Compiling routine petstoreclient.requests.deleteOrder.1
Compiling routine petstoreclient.requests.deletePet.1
Compiling routine petstoreclient.requests.deleteUser.1
Compiling routine petstoreclient.requests.findPetsByStatus.1
Compiling routine petstoreclient.requests.getInventory.1
Compiling routine petstoreclient.requests.findPetsByTags.1
Compiling routine petstoreclient.requests.getOrderById.1
Compiling routine petstoreclient.requests.getPetById.1
Compiling routine petstoreclient.requests.getUserByName.1
Compiling routine petstoreclient.requests.loginUser.1
Compiling routine petstoreclient.requests.logoutUser.1
Compiling routine petstoreclient.requests.placeOrder.1
Compiling routine petstoreclient.requests.updatePet.1
Compiling routine petstoreclient.requests.updatePetWithForm.1
Compiling routine petstoreclient.requests.updateUser.1
Compiling routine petstoreclient.requests.uploadFile.1
Compiling routine petstoreclient.responses.GenericResponse.1
Compiling routine petstoreclient.responses.addPet.1
Compiling routine petstoreclient.responses.createUser.1
Compiling routine petstoreclient.responses.deleteOrder.1
Compiling routine petstoreclient.responses.createUsersWithListInput.1
Compiling routine petstoreclient.responses.deletePet.1
Compiling routine petstoreclient.responses.deleteUser.1
Compiling routine petstoreclient.responses.findPetsByTags.1
Compiling routine petstoreclient.responses.findPetsByStatus.1
Compiling routine petstoreclient.responses.getInventory.1
Compiling routine petstoreclient.responses.getOrderById.1
Compiling routine petstoreclient.responses.getPetById.1
Compiling routine petstoreclient.responses.loginUser.1
Compiling routine petstoreclient.responses.getUserByName.1
Compiling routine petstoreclient.responses.logoutUser.1
Compiling routine petstoreclient.responses.updatePet.1
Compiling routine petstoreclient.responses.placeOrder.1
Compiling routine petstoreclient.responses.updatePetWithForm.1
Compiling routine petstoreclient.responses.updateUser.1
Compiling routine petstoreclient.responses.uploadFile.1
Load finished successfully.
IRISAPP>
<p>
</p>
お読みいただきありがとうございました!