REST/JSON:如何生成示例请求?如何公开 API?

Posted

技术标签:

【中文标题】REST/JSON:如何生成示例请求?如何公开 API?【英文标题】:REST/JSON : How to generate sample requests ? How to expose API? 【发布时间】:2015-03-30 20:46:14 【问题描述】:

使用 java,当我使用 Soap 公开一些 Web 服务时,我有一个描述所有输入/输出的 WSDL,如果我在我的 SoapUI 客户端中使用这个 WSDL,它会分析它并为我生成一些示例请求。

使用 Rest/Json 执行此操作的过程是什么。我知道 wadl,但 SoapUI 无法从中生成示例请求。我知道像 Swagger 套件这样的第三方工具,但这是唯一的方法吗?您是否必须使用一些外部文档工具来公开您的 API 并向用户展示一些示例请求?

【问题讨论】:

你能解决这个问题吗? 好吧,招摇现在是一个“标准”:en.wikipedia.org/wiki/OpenAPI_Specification 【参考方案1】:

目前还没有答案,所以这是几年后的答案。

您需要使用OpenAPI Specification(我们将结果称为“Swagger 合约”),它定义了一个标准的、与语言无关的 RESTful API 接口,而忘记了 WADL。

这将等效于 SOAP WSDL,但更易于阅读、更易于生成且约束更轻松。

使用 Swagger,您可以在“合约优​​先”(使用 https://editor.swagger.io/ 设计合约)或“代码优先”中工作,您将使用像 Springfox 这样的框架从代码 + 注释生成 swagger 合约。最后一个更容易 imo,它只是“合同优先”的另一种方式,不像你在设计合同之前实现整个应用程序。

在 URL 上获得“swagger contract”文档后,您可以部署一个 swagger-ui 网站以交互方式对其进行可视化:它将生成一些示例请求,并允许您在自定义请求后执行这些请求.

【讨论】:

【参考方案2】:
 try 
           url="put your service url";
                HttpPost request = new HttpPost(url);
                request.setHeader("Accept", "application/json");
                request.setHeader("Content-type", "application/json");

                // Build JSON string
                JSONStringer item = new JSONStringer()
                        .object()
                        .key("password").value(pass)
                        .key("username").value(email)
                        .endObject();
                StringEntity entity = new StringEntity(item.toString());

                request.setEntity(entity);

                // Send request to WCF service
                DefaultHttpClient httpClient = new DefaultHttpClient();
                HttpResponse response = httpClient.execute(request);
                HttpEntity entity1 = response.getEntity();
                InputStream stream = entity1.getContent();
                r = Splash.convertStreamToString(stream);
                    JSONObject jo = new JSONObject(r);
                s=  (Integer) jo.get("Flag");
                Log.d("json result is:", r);
            statusCode = response.getStatusLine().getStatusCode();

             catch (Exception e) 
                e.printStackTrace();

            Log.d("error", "code"+0);
        
        return s;
    

【讨论】:

你写的任何东西都与我的问题有关?

以上是关于REST/JSON:如何生成示例请求?如何公开 API?的主要内容,如果未能解决你的问题,请参考以下文章

如何在访问原始请求正文的同时为 Web API 帮助页面生成正文参数/示例请求

如何在不公开 API 密钥的情况下发出 POST 请求?

如何使用 REST/JSON/GET/POST 从我的节点服务器访问我的 couchdb?

Spring Security (OAuth):如何在未公开 restTemplate 时添加请求标头?

如何使用 Flask-rest-jsonapi / JSON API 在同一个 POST 方法中创建对象和相关对象?

简单获取新浪短网址API接口的方法(附PHP请求示例)