記事
· 2023年10月18日 7m read

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 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 classes
Set type = "client"
; Request and Install the generated code.
Set sc = ##class(dc.openapi.suite.client.RemoteCodeGen).Generate(specification, packageName, type, server)
 

ターミナルの出力

お読みいただきありがとうございました!

ディスカッション (0)1
続けるにはログインするか新規登録を行ってください