API Management
15/03/2021

Hoe een SOAP-backend-service beschikbaar stellen als een REST API met Gravitee.io

In deze insight laten we zien hoe u SOAP-webservices kunt ‘RESTifiëren’ zonder de applicatie zelf opnieuw te moeten bouwen. De gemakkelijkste manier om uw SOAP-services RESTvol te maken, is door Gravitee.io te gebruiken. Het is het meest performante en kosteneffectieve Open Source API-platform dat uw organisatie helpt bij het beveiligen, publiceren en analyseren van uw API's.

 

Veel applicaties op bedrijfsniveau vertrouwen nog steeds op het SOAP-protocol om webservices beschikbaar te stellen. Het is veilig en sterk gestandaardiseerd en daarom een goede keuze om gegevens via HTTP uit te wisselen. Aan de andere kant is het steeds groter wordende aantal web- en mobiele applicaties grotendeels gebaseerd op het lichtere en gebruiksvriendelijkere REST-protocol.

 

REST is gebaseerd op JSON, een lichtgewicht formaat voor gegevensuitwisseling dat minder overhead met zich meebrengt in vergelijking met de zeer uitgebreide (en vaak uiterst complexe) XMLin SOAP. JSON betekent ook betere ondersteuning voor browserclients. REST calls kunnen in de cache worden opgeslagen voor betere prestaties en schaalbaarheid.

 

 

Gravitee Architecture

Vereisten

 

Als API Management Platform zullen we dus Gravitee.io gebruiken. Het is Open Source en kan worden ingesteld met docker in uw lokale omgeving. Installeer Docker en maak gebruik van het volgende docker-compose bestand om het op te zetten. Hier kunt u ook algemene documentatie raadplegen.

SOAP-service

 

De AXI Retail Suite bijvoorbeeld, bestaat uit SOAP webservices voor de communicatie tussen de kassa en de AXI Retail Suite backend. We zullen een proof of concept creëren om een bepaalde SOAP-actie aan te bieden als een REST-service, met name de actie getProductByBarcode.

 

Voorbeeld van de servicelink: https://dev.axi.nl/rd2000.axi.ont.bob/BobWebServicePort?WSDL

 

SOAP-service image code

Om een duidelijk overzicht te krijgen van de SOAP-acties, zullen we SOAPUI gebruiken.

 

  • Om de service in SOAPUI te importeren, klikt u op File > New SOAP Project.

  • Voer in het eerste WSDL-veld de service-URL in. De projectnaam wordt automatisch gegenereerd.

 

SOAPUI start

  • Klik op OK. Nu ziet u alle SOAP-acties verschijnen.

 

In deze tutorial zullen we de actie getProductByBarcode gebruiken. In onderstaande afbeelding ziet u het verzoek en de reactie van de bijbehorende actie.

 

SOAP request 1

OpenAPI-document in SwaggerHub

 

De volgende stap is het maken van een OpenAPI-document in SwaggerHub. Met dit bestand kunt u uw volledige API beschrijven. Als u niet bekend bent met het schrijven van een OpenAPI-document, kunnen we de online cursus OpenAPI aanbevelen.

Dit document is handig om te definiëren hoe uw REST API eruit zal zien. Bovendien kunt u het bestand later importeren in Gravitee.io Management om de API automatisch te genereren.

 

Het volgende document beschrijft:

 

  • Het beschikbaar eindpunt (/ stores / {storeId} / products / {barcode}) en de bewerking op het eindpunt (GET)

  • Verzoek invoerparameters en responsmodellen

  • Authentificatiemethoden

  • Contactgegevens, licentie, gebruiksvoorwaarden en andere informatie

openapi: 3.0.0

info

  version: 1.0.0-oas3

  title: AXIRS API

  description: This is the AXIRS API. It provides RESTful operations for AXIRS data

  termsOfService: terms

  contact:

    name: Reinbert Van Acker

    e-mail: rvck@axi.be

  license:

    name: MIT

    url: 'http://opensource.org/licenses/MIT'

paths:

  '/ stores / {storeId} / products / {barcode}':

    get:

      summary: reads a product's data

      operationId: getProductByBarcode

      description: >-

        This operation provides a view of the product's data in JSON. The operation uses the storeId and barcode to identify the product in path parameters.

      parameters:

        - in: path

          name: storeId

          required: true

          schema:

            type: integer

          description: The store ID

        - in: path

          name: barcode

          required: true

          schema:

            type: string

          description: The product's barcode

      responses:

        '200':

          description: Product Found

        '404':

          description: Product with this barcode or store id does not exist

security:

  - BasicAuth: []

servers:

  - url: 'http://dev.axi.nl/rd2000.axi.ont.bob/BobWebServicePort'

  - url: 'https://dev.axi.nl/rd2000.axi.ont.bob/BobWebServicePort'

components:

  securitySchemes:

    BasicAuth:

      type: http

      scheme: basic

Het laatste dat we in SwaggerHub zullen doen, is het OpenAPI-document opslaan om later in Gravitee Management te importeren.

 

  • Klik in de rechterbovenhoek op Export > Download API > JSON Resolved.

Gravitee.io Management

 

Deze stap beschrijft hoe u een API aanmaakt in Gravitee Management. Het benodigde beleid wordt toegevoegd om de SOAP-actie om te zetten in een REST API.

 

Importeer het OpenAPI-document dat we in de vorige stap hebben gedownload:

 

  • Klik op het API's tabblad op de plus-knop in de rechterbenedenhoek.

  • Klik op het volgende scherm op Import.

 

Gravitee import file

  • Selecteer IMPORT FILE.

  • Selecteer vervolgens uw OpenAPI-document.

  • Selecteer create policies on paths en klik op IMPORT.

 

Gravitee Import Studio

Nu uw API is gegenereerd, klikt u op het tabblad Design. Daar ziet u het eindpunt dat is gedefinieerd in het OpenAPI-document.

 

Gravitee flow configurator

Hier zullen we drie beleidsregels toevoegen om van een SOAP-service naar een REST API te gaan:

 

 

1 REST naar SOAP Transformer

 

U kunt het rest-to-soap-beleid gebruiken om de SOAP-backend-service beschikbaar te stellen als een REST API. Het beleid geeft het SOAP-envelopbericht door aan de back-endservice als een POST-verzoek. SOAP-enveloppen ondersteunen Expression Language voor dynamische SOAP-acties.

 

  • Drag en drop het rest-to-soap-beleid op de Request pijl.

 

Request flow

  • Voor de SOAP-envelop vult u het volgende codefragment van de verzoekenvelop in dat u in SOAPUI vindt.

 

REST to SOAP transformer

  • Gebruik Expression Language om de REST-pad parameterwaarden op te halen.

  • Voer voor een SOAP-actie getproductbybarcodein.

  • Voer bij Charset UTF-8 in.

  • Selecteer de schakelaar Strip path.

  • Bewaar uw wijzigingen.

 

SOAP action

2 XSLT-transformatie

 

U kunt het xslt-beleid gebruiken om een XSL-transformatie toe te passen op een inkomende XML-aanvraagtekst of op de antwoordtekst als uw backend XML-inhoud vrijgeeft. Dit beleid is gebaseerd op de Saxon library.

 

  • Versleep het xslt-beleid naar de RESPONSE pijl.

  • Kopieer het xsl-voorbeeld en plak het in het beleid. Deze XSL-stylesheet verwijdert de SOAP-elementen bij het aanroepen van een webservice.

  • Bewaar uw wijzigingen.

 

Response flow

3 XML naar JSON

 

U kunt het xml-json-beleid gebruiken om XML-inhoud om te zetten naar JSON-inhoud.

 

  • Versleep het XML naar JSON-beleid op de RESPONSE pijl na het xslt-beleid.

  • Bewaar uw wijzigingen.

 

Response flow

Als de output nog steeds niet naar wens is, is het mogelijk om het json-to-json-beleid te gebruiken om een transformatie (of mapping) toe te passen op de inhoud van het verzoek en / of het antwoord.

 

 

Implementeer de API

 

Nadat het beleid is toegevoegd, is het tijd om de API te implementeren.

 

  • Klik in het Portal tabblad op Start the API. Het is beschikbaar op alle gateways.

  • Klik op Publish the API. Het zal beschikbaar zijn op de portal.

 

 

Abonneer u op de API

 

Zodra een API geregistreerd en openbaar gemaakt is, kunt u er abonnementen op beheren via APIM-plannen. Het beheren van abonnementen en plannen is een belangrijk kenmerk van APIM dat uitgevers kunnen gebruiken om toegang tot API's te bieden en te reguleren.

 

  • Maak uw Keyless (openbaar) plan met auto validation.

  • Zodra het plan is gemaakt, abonneert u zich erop in het APIM Portal om toegang te krijgen tot de API.

 

AXIRS API

Test met Postman

 

De laatste stap is om de API te testen en te kijken of we het antwoord in een correct JSON-formaat ontvangen. Hiervoor gebruiken we Postman.

Vul het volgende verzoek in en klik op Send:

 

GET http://localhost:8082/axi/rs/v1/stores/20000/products/8711247066125

 

Ten slotte ontvangt u een duidelijk JSON-antwoord:

{

        "result": {

            "productgrp": {

                "num": 13150,

                "oid": "DRPRGRP_RS-20000-13150",

                "code": 13150,

                "productgroupstorenumber": 20000

            },

            Beschrijving1 "PIJPENSNIJDER PROF  TOT 30MM",

            "scannedbarcodevalue": 8711247066125,

            "returnallowed": 1,

            "sellingprice": {

                "priceproductoid": "DRPRODU_RS-20000-674333",

                "pricevat": {

                    "oid": "DRBTWTB_RS-1",

                    "vatcode": 1

                },

                "pricestore": 20000,

                "oid": "DRVRKPR_RS-20000-674333-20000-20021007",

                "pricestartdate": "2002-10-07T00:00:00.000+02:00",

                "priceamount": 13.29,

                "pricetypestoredprice": 1

            },

            "oid": "DRPRODU_RS-20000-674333",

            "packing": {

                "packcost": {

                    "amount": 0.25,

                    "oid": "DRCOSTS_RS-20000-STAT",

                    "description1": "statiegeld fles",

                    "description2": "statiegeld fles",

                    "code": "STAT",

                    "type": "CPA",

                    "coststorenumber": 20000

                },

                "packquantity": 1,

                "description4": "Piece",

                "oid": "DRVRPAK_RS-20000-STUK",

                "description1": "Stuk",

                "description3": "Stück",

                "description2": "Pièce",

                "code": "STUK"

            },

            "productstartselldate": "2004-01-01T00:00:00.000+01:00",

            "producttype": "P",

            "quantityindimension": 1,

            "salesperdimension": 0,

            "productstorenumber": 20000,

            "promotionlowed": 1,

            "code": 674333,

            "dimen": {

                "oid": "DRDIMEN_RS-1",

                "code": 1

            },

            "checkstock": 0,

            "discountallowed": 1,

            "productendselldate": "9999-01-01T00:00:00.000+01:00",

            "productdestination": 20000

        }

}

Dit is een manier om zeer snel een SOAP-backend-service om te zetten in een REST API. U kunt nog meer doen met Gravitee.io API Management. Experimenteer met het Gravitee.io API Platform om van alle functies te kunnen genieten.

 

 

Benieuwd hoe AXI jou hierbij kan helpen? Ontdek het hier.

 

Geschreven door Reinbert Van Acker, Integration Engineer bij AXI

Ik schrijf me in op de insights rond Gravitee

 

Ik laat me graag inspireren