apiman

How to test an API locally in apiman?


Desired Behaviour

I want to test an apiman API locally in order to view the response of the apiman-quickstarts/echo-service (or if that is no longer applicable in the latest version of apiman, any echo response would be great).

What I've Tried

I installed apiman on Ubuntu 17.10 using the following from the the official apiman site:

mkdir ~/apiman-1.3.1.Final
cd ~/apiman-1.3.1.Final
curl http://download.jboss.org/wildfly/10.1.0.Final/wildfly-10.1.0.Final.zip -o wildfly-10.1.0.Final.zip
curl http://downloads.jboss.org/apiman/1.3.1.Final/apiman-distro-wildfly10-1.3.1.Final-overlay.zip -o apiman-distro-wildfly10-1.3.1.Final-overlay.zip
unzip wildfly-10.1.0.Final.zip
unzip -o apiman-distro-wildfly10-1.3.1.Final-overlay.zip -d wildfly-10.1.0.Final
cd wildfly-10.1.0.Final
./bin/standalone.sh -c standalone-apiman.xml

Using the apiman GUI (localhost:8080/apimanui/api-manager), I created an Organisation, a Public API with no API Security, an Endpoint arbitrarily defined as http://localhost:8080/apiman-echo, and a Client App. As the API is defined as Public, it is my understanding that no Contract needs to be defined in the Client App. The Managed Endpoint of the API was provided in the GUI as:

https://localhost:8443/apiman-gateway/MyTestOrganisation/MyTestAPI/2.0

Actual Behaviour

These are the curl results:

# using the 'managed endpoint' provided in the gui - https
curl -k https://localhost:8443/apiman-gateway/MyTestOrganisation/MyTestAPI/2.0
<html><head><title>Error</title></head><body>404 - Not Found</body></html>

# using the 'managed endpoint' provided in the gui - http
curl -k http://localhost:8443/apiman-gateway/MyTestOrganisation/MyTestAPI/2.0
curl: (52) Empty reply from server

#using the endpoint i defined
curl -k http://localhost:8080/apiman-echo
<html><head><title>Error</title></head><body>404 - Not Found</body></html>

The crash course documentation (apiman.io/latest/crash-course.html) states that the following is the contents of the apiman folder, however a search for quickstarts in the wildfly-10.1.0.Final folder on my pc returns no results:

├── apiman
│   ├── data
│   │   ├── all-policyDefs.json
│   │   └── apiman-realm.json
│   ├── ddls
│   │   ├── apiman_mysql5.ddl
│   │   └── apiman_postgresql9.ddl
│   ├── quickstarts
│   │   ├── echo-service
│   │   ├── LICENSE
│   │   ├── pom.xml
│   │   └── README.md
│   └── sample-configs
│       ├── apiman-ds_mysql.xml
│       └── apiman-ds_postgresql.xml

I feel like I am missing a couple of steps somewhere that relate to "installing" the echo-service and making it available to test.

Searching for echo in apiman.gitbooks.io/apiman-user-guide and apiman.gitbooks.io/apiman-production-guide produces no results, whilst apiman.io/latest/developer-guide.html states:

the mock back-end API is a simple "echo" API that responds to all requests with a JSON payload describing the request it received

But I am not sure how to interpret and utilise that information.


Solution

  • I think I have figured out a solution.

    There is a section in a blog post here called "Getting and Building and Deploying the Example API" the content of which seems to be more relevant to earlier versions of apiman but generally holds true.

    I document my process and result below in case it assists anyone else.

    The following steps from the blog post resulted in a compilation error:

    # make a directory on desktop to clone files into
    mkdir ~/Desktop/my_container_for_echo_quickstart
    
    # change into directory
    cd my_container_for_echo_quickstart
    
    # git clone
    git clone https://github.com/apiman/apiman-quickstarts.git
    
    # change into directory
    cd apiman-quickstarts/echo-service/
    
    # install maven so i can run `mvn package` 
    sudo apt install maven
    
    # run `mvn package`
    mvn package
    

    After logging lots of download information, the following error was displayed:

    [ERROR] COMPILATION ERROR : 
    [INFO] -------------------------------------------------------------
    [ERROR] No compiler is provided in this environment. Perhaps you are running on a JRE rather than a JDK?
    [INFO] 1 error
    [INFO] -------------------------------------------------------------
    [INFO] ------------------------------------------------------------------------
    [INFO] BUILD FAILURE
    [INFO] ------------------------------------------------------------------------
    [INFO] Total time: 01:37 min
    [INFO] Finished at: 2017-11-26T19:39:29+10:00
    [INFO] Final Memory: 17M/242M
    [INFO] ------------------------------------------------------------------------
    [ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.2:compile (default-compile) on project apiman-quickstarts-echo-service: Compilation failure
    [ERROR] No compiler is provided in this environment. Perhaps you are running on a JRE rather than a JDK?
    [ERROR] 
    [ERROR] -> [Help 1]
    [ERROR] 
    [ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
    [ERROR] Re-run Maven using the -X switch to enable full debug logging.
    [ERROR] 
    [ERROR] For more information about the errors and possible solutions, please read the following articles:
    [ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureException
    

    And then I looked for java version and got the following:

    java -version
    openjdk version "1.8.0_151"
    OpenJDK Runtime Environment (build 1.8.0_151-8u151-b12-0ubuntu0.17.10.2-b12)
    OpenJDK 64-Bit Server VM (build 25.151-b12, mixed mode)
    

    So I did this:

    sudo apt-get update
    sudo apt-get install openjdk-8-jdk
    mvn package
    

    And got BUILD SUCCESS. The blog post continues that:

    If you look closely, near the end of the output, you’ll see the location of the .war file

    It actually output the location of the .jar file:

    Building jar: /home/me/Desktop/my_container_for_echo_quickstart/apiman-quickstarts/echo-service/target/apiman-quickstarts-echo-service-1.3.1.Final-javadoc.jar
    

    But there was a .war file in the same directory:

    apiman-quickstarts-echo-service-1.3.1.Final.war
    

    So I copied that to /home/me/apiman-1.3.1.Final/wildfly-10.1.0.Final/standalone/deploymentsand saw the server output change in the other terminal:

    20:10:54,463 INFO  [org.jboss.as.repository] (DeploymentScanner-threads - 1) WFLYDR0001: Content added at location /home/me/apiman-1.3.1.Final/wildfly-10.1.0.Final/standalone/data/content/c6/*****/content
    20:10:54,482 INFO  [org.jboss.as.server.deployment] (MSC service thread 1-6) WFLYSRV0027: Starting deployment of "apiman-quickstarts-echo-service-1.3.1.Final.war" (runtime-name: "apiman-quickstarts-echo-service-1.3.1.Final.war")
    20:10:54,667 INFO  [org.wildfly.extension.undertow] (ServerService Thread Pool -- 76) WFLYUT0021: Registered web context: /apiman-echo
    20:10:54,772 INFO  [org.jboss.as.server] (DeploymentScanner-threads - 1) WFLYSRV0010: Deployed "apiman-quickstarts-echo-service-1.3.1.Final.war" (runtime-name : "apiman-quickstarts-echo-service-1.3.1.Final.war")
    

    This was the resulting curl results:

    curl -k http://localhost:8080/apiman-echo
    {
      "method" : "GET",
      "resource" : "/apiman-echo",
      "uri" : "/apiman-echo",
      "headers" : {
        "Accept" : "*/*",
        "User-Agent" : "curl/7.55.1",
        "Host" : "localhost:8080"
      },
      "bodyLength" : null,
      "bodySha1" : null
    }
    

    Whilst this is encouraging, I am concerned that because I set up the API in the apiman GUI first with the /apiman-echo endpoint, there will be a clash between it and the endpoint I created through the maven process, but we will see.