标签: rest

java中SOAP和RESTful Web服务之间的主要区别

跟进此帖子的问题:

目前我对SOAP和RESTful Services之间的差异略有了解.

我的问题是我何时应该使用SOAP,何时应该使用RESTful; 在性能/速度或请求处理方面,哪一个"更好"?

我正在RESTful(java)中第一次实现,我想要了解更多; 我以前处理过SOAP.

java rest soap

251
推荐指数
10
解决办法
62万
查看次数

如何在PHP中获取POST的正文?

我作为POST提交到php页面如下:

{a:1}
Run Code Online (Sandbox Code Playgroud)

这是请求的主体(POST请求).
在php中,我需要做些什么才能提取该值?

var_dump($_POST); 
Run Code Online (Sandbox Code Playgroud)

不是解决方案,不起作用.

php rest post

243
推荐指数
5
解决办法
23万
查看次数

REST vs JSON-RPC?

我正在尝试在REST和JSON-RPC之间进行选择,以便为Web应用程序开发API.哪一个更容易用于API客户端?

更新2015:我发现REST更易于开发和使用在Web/HTTP上提供的API,因为API可以利用客户端和服务器都能理解的现有和成熟的HTTP协议.例如,API可以使用响应代码,标题,查询,帖子正文,缓存和许多其他功能,而无需任何额外的工作或设置.

rest rpc json-rpc

242
推荐指数
10
解决办法
12万
查看次数

JavaScript/jQuery通过POST使用JSON数据下载文件

我有一个基于jquery的单页webapp.它通过AJAX调用与RESTful Web服务进行通信.

我正在努力完成以下任务:

  1. 将包含JSON数据的POST提交到REST URL.
  2. 如果请求指定了JSON响应,则返回JSON.
  3. 如果请求指定了PDF/XLS/etc响应,则返回可下载的二进制文件.

我现在有1和2工作,客户端jquery应用程序通过基于JSON数据创建DOM元素来显示网页中返回的数据.从Web服务的角度来看,我也有#3工作,这意味着如果给出正确的JSON参数,它将创建并返回二进制文件.但我不确定在客户端javascript代码中处理#3的最佳方法.

是否有可能从这样的ajax调用中获取可下载的文件?如何让浏览器下载并保存文件?

$.ajax({
    type: "POST",
    url: "/services/test",
    contentType: "application/json",
    data: JSON.stringify({category: 42, sort: 3, type: "pdf"}),
    dataType: "json",
    success: function(json, status){
        if (status != "success") {
            log("Error loading data");
            return;
        }
        log("Data loaded!");
    },
    error: function(result, status, err) {
        log("Error loading data");
        return;
    }
});
Run Code Online (Sandbox Code Playgroud)

服务器响应以下标头:

Content-Disposition:attachment; filename=export-1282022272283.pdf
Content-Length:5120
Content-Type:application/pdf
Server:Jetty(6.1.11)
Run Code Online (Sandbox Code Playgroud)

另一个想法是生成PDF并将其存储在服务器上并返回包含该文件的URL的JSON.然后,在ajax成功处理程序中发出另一个调用,执行以下操作:

success: function(json,status) {
    window.location.href = json.url;
}
Run Code Online (Sandbox Code Playgroud)

但这样做意味着我需要对服务器进行多次调用,而我的服务器需要构建可下载的文件,将它们存储在某处,然后定期清理该存储区域.

必须有一种更简单的方法来实现这一目标.想法?


编辑:在查看$ .ajax的文档后,我看到响应dataType只能是其中之一xml, html, script, json, jsonp, text,所以我猜测没有办法使用ajax请求直接下载文件,除非我在使用中嵌入二进制文件@VinayC答案中建议的数据URI方案(这不是我想做的事情).

所以我想我的选择是:

  1. 不使用ajax而是提交表单帖子并将我的JSON数据嵌入到表单值中.可能需要搞乱隐藏的iframe等.

  2. 不使用ajax而是将我的JSON数据转换为查询字符串以构建标准GET请求并将window.location.href设置为此URL.可能需要在我的单击处理程序中使用event.preventDefault()以防止浏览器从应用程序URL更改. …

javascript ajax rest jquery

241
推荐指数
9
解决办法
34万
查看次数

JAX-RS - 如何将JSON和HTTP状态代码一起返回?

我正在编写REST Web应用程序(NetBeans 6.9,JAX-RS,TopLink Essentials)并尝试返回JSON HTTP状态代码.我已准备好代码并且在从客户端调用HTTP GET方法时返回JSON.实质上:

@Path("get/id")
@GET
@Produces("application/json")
public M_?? getMachineToUpdate(@PathParam("id") String id) {

    // some code to return JSON ...

    return myJson;
}
Run Code Online (Sandbox Code Playgroud)

但是,我想用JSON数据一起返回的HTTP状态代码(500,200,204,等).

我试着用HttpServletResponse:

response.sendError("error message", 500);
Run Code Online (Sandbox Code Playgroud)

但这使得浏览器认为它是"真正的"500,因此输出网页是一个常规的HTTP 500错误页面.

我想返回一个HTTP状态代码,以便我的客户端JavaScript可以根据它处理一些逻辑(例如在HTML页面上显示错误代码和消息).这是可能的还是HTTP状态代码不能用于此类事情?

java rest jax-rs http-status-codes

237
推荐指数
8
解决办法
45万
查看次数

如何使用REST Web服务上载包含元数据的文件?

我有一个REST Web服务,目前公开此URL:

HTTP://服务器/数据/媒体

用户可以POST使用以下JSON:

{
    "Name": "Test",
    "Latitude": 12.59817,
    "Longitude": 52.12873
}
Run Code Online (Sandbox Code Playgroud)

为了创建新的媒体元数据.

现在我需要能够在媒体元数据的同时上传文件.解决这个问题的最佳方法是什么?我可以引入一个名为filebase64 的新属性编码文件,但我想知道是否有更好的方法.

还有multipart/form-data像HTML表单一样使用,但我正在使用REST Web服务,我想尽可能坚持使用JSON.

rest json web-services file-upload

233
推荐指数
6
解决办法
23万
查看次数

从请求库解析JSON响应的最佳方法是什么?

我正在使用python requests模块向服务器发送RESTful GET,我在JSON中得到响应.JSON响应基本上只是一个列表列表.

强制响应本机Python对象的最佳方法是什么,所以我可以使用迭代或打印出来pprint

python rest json python-requests

232
推荐指数
3
解决办法
39万
查看次数

否'Access-Control-Allow-Origin' - 节点/ Apache端口问题

我使用Node/Express创建了一个小API并尝试使用Angularjs来提取数据,但是当我的html页面在localhost:8888上运行apache并且节点API在端口3000上侦听时,我得到了No'Access-Control-允许来源.我尝试使用node-http-proxy和Vhosts Apache但没有取得多大成功,请参阅下面的完整错误和代码.

"XMLHttpRequest无法加载localhost:3000.请求的资源上没有'Access-Control-Allow-Origin'标头.因此不允许来自"localhost:8888"."

// Api Using Node/Express    
var express = require('express');
var app = express();
var contractors = [
    {   
     "id": "1", 
        "name": "Joe Blogg",
        "Weeks": 3,
        "Photo": "1.png"
    }
];

app.use(express.bodyParser());

app.get('/', function(req, res) {
  res.json(contractors);
});
app.listen(process.env.PORT || 3000);
console.log('Server is running on Port 3000')
Run Code Online (Sandbox Code Playgroud)

rest node.js cors express angularjs

230
推荐指数
10
解决办法
28万
查看次数

用于Java的REST客户端?

使用JSR 311及其实现,我们有一个强大的标准,可以通过Rest公开Java对象.但是在客户端方面似乎缺少可与Apache Axis for SOAP相媲美的东西 - 隐藏Web服务并将数据透明地封送回Java对象.

如何创建Java RESTful客户端?使用HTTPConnection和手动解析结果?或者专业客户,例如Jersey或Apache CXR?

java rest client

229
推荐指数
11
解决办法
30万
查看次数

Spring RestTemplate GET参数

我必须REST拨打包含自定义标头和查询参数的电话.我HttpEntity只用标题(没有正文)设置我,我使用RestTemplate.exchange()如下方法:

HttpHeaders headers = new HttpHeaders();
headers.set("Accept", "application/json");

Map<String, String> params = new HashMap<String, String>();
params.put("msisdn", msisdn);
params.put("email", email);
params.put("clientVersion", clientVersion);
params.put("clientType", clientType);
params.put("issuerName", issuerName);
params.put("applicationName", applicationName);

HttpEntity entity = new HttpEntity(headers);

HttpEntity<String> response = restTemplate.exchange(url, HttpMethod.GET, entity, String.class, params);
Run Code Online (Sandbox Code Playgroud)

这在客户端失败,dispatcher servlet无法解析对处理程序的请求.调试它后,看起来似乎没有发送请求参数.

当我POST使用请求正文进行交换而没有查询参数时,它可以正常工作.

有没有人有任何想法?

java rest spring

227
推荐指数
9
解决办法
35万
查看次数