【问题标题】:How to test an API locally in apiman?如何在 apiman 中本地测试 API?
【发布时间】:2017-11-26 09:14:50
【问题描述】:

期望的行为

我想在本地测试一个 apiman API 以查看 apiman-quickstarts/echo-service 的响应(或者如果最新版本的 apiman 不再适用,任何回显响应都会很棒)。

我的尝试

我使用the official apiman site 中的以下内容在Ubuntu 17.10 上安装了apiman

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

使用 apiman GUI (localhost:8080/apimanui/api-manager),我创建了一个Organisation、一个没有API SecurityPublic API、一个任意定义为http://localhost:8080/apiman-echoEndpoint 和一个Client App。由于 API 定义为 Public,因此我的理解是 Client App 中不需要定义 Contract。 API 的Managed Endpoint 在 GUI 中提供为:

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

实际行为

这些是卷曲结果:

# 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>

速成课程文档 (apiman.io/latest/crash-course.html) 指出以下是 apiman 文件夹的内容,但是在我的电脑上的 wildfly-10.1.0.Final 文件夹中搜索 quickstarts 不会返回任何结果:

├── 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

我觉得我在某处遗漏了一些与“安装”echo-service 并使其可供测试相关的步骤。

apiman.gitbooks.io/apiman-user-guideapiman.gitbooks.io/apiman-production-guide 中搜索echo 不会产生任何结果,而apiman.io/latest/developer-guide.html 状态:

模拟后端 API 是一个简单的“回声”API,它响应所有 带有描述其接收到的请求的 JSON 有效负载的请求

但我不确定如何解释和利用这些信息。

【问题讨论】:

    标签: apiman


    【解决方案1】:

    我想我已经找到了解决方案。

    blog post here 中有一个名为“获取、构建和部署示例 API”的部分,其内容似乎与早期版本的 apiman 更相关,但通常是正确的。

    我在下面记录我的过程和结果,以防它帮助其他人。

    博客文章中的以下步骤导致编译错误:

    # 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
    

    记录大量下载信息后,显示以下错误:

    [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
    

    然后我寻找java版本并得到以下内容:

    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)
    

    所以我这样做了:

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

    得到了BUILD SUCCESS。博文继续说:

    如果您仔细观察,靠近输出的末尾,您会看到 .war 文件的位置

    它实际上输出了.jar文件的位置:

    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
    

    但是在同一目录中有一个.war文件:

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

    所以我把它复制到/home/me/apiman-1.3.1.Final/wildfly-10.1.0.Final/standalone/deployments并看到另一个终端的服务器输出发生了变化:

    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")
    

    这是产生的卷曲结果:

    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
    }
    

    虽然这令人鼓舞,但我担心因为我首先使用 /apiman-echo 端点在 apiman GUI 中设置 API,它与我通过 maven 进程创建的端点之间会发生冲突,但我们会看。

    【讨论】:

      猜你喜欢
      • 2010-12-16
      • 1970-01-01
      • 2011-02-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-20
      • 2021-05-14
      • 1970-01-01
      相关资源
      最近更新 更多