Article
· Mars 3, 2023 9m de lecture

OpenAPI Suite - Partie 2

Bonjour à la communauté,

Dans la première partie, nous avons décrit tous les packages, les bibliothèques utilisées et les services REST.  J'aimerais maintenant détailler un peu plus les services convertisseur et validateur.  Par défaut, OpenAPI-Suite envoie une requête HTTP  converter.swagger.io si a spécification est de version inférieure à 3.0 et une autre requête HTTP à validator.swagger.io pour simplifier la structure de la spécification.  

Bien que l'utilisation d'utilitaires en ligne soit pratique, dans certains cas, nous pourrions préférer avoir notre propre instance du convertisseur et du validateur.  Par exemple, si OpenAPI-Suite est mis à disposition sur un serveur dans une organisation pour les développeurs ObjectScript, il peut être préférable d'éviter les requêtes vers les services externes (confidentialité, éviter les limites de taux de demande,...).  Ceux-ci sont disponibles en images Docker, il suffit d'exécuter : 

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

Ouvrez votre navigateur aux l'URL http://localhost:8085/ et http://localhost:8086/ et vous avez accès à l'interface utilisateur de ces services.  

OpenAPI-Suite doit ensuite être configuré pour utiliser les services locaux au lieu des services REST publics, pour cela ouvrez un terminal IRIS et définissez les paramètres suivants:

Set ^swaggervalidator("ValidatorURL")="http://<hostname>"
Set ^swaggervalidator("Port")=<port>
Set ^swaggerconverter("ConverterURL")="http://<hostname>"
Set ^swaggerconverter("Port")=<port>

Voyons maintenant comment intégrer cela dans un fichier docker-compose et le faire automatiquement.

Tout d'abord, nous préparons un script post-start script(nommé 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

Ce script sera exécuté par le programme iris-main program.  Vérifiez que le script a les droits "execute" (chmod +x init_openapisuite.sh).  

Ensuite, nous pouvons créer un fichier docker-compose comme ceci :

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

Toutes les ressources sont disponibles dans ce repository GitHub, si vous l'avez déjà cloné, faites simplement un "git pull" pour obtenir les dernières mises à jour.  Ensuite, vous pouvez démarrer OpenAPI-Suite avec tous les services avec la commande suivante :  

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

Ce n'est qu'une idée, mais si le développement d'OpenAPI-Suite devient suffisamment complet, l'application pourrait être utilisée pour offrir des services de génération de code ObjectScript en ligne.  Actuellement, l'application est hébergée sur le dc demo server, cela qui m'a donné l'idée de faire un petit client pour openapi-suite(généré par openapi-suite lui-même !).  Il est donc possible de bénéficier de la génération de code à distance sans avoir à installer tous les outils localement:

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)
 
Terminal output

Merci!

Discussion (0)1
Connectez-vous ou inscrivez-vous pour continuer