Rest Api接受Blob输入

时间:2014-12-18 06:23:18

标签: java api rest blob

我的产品中有搜索功能,用户可以输入他想要的任何内容。 这个字符串可以是多行的。

输入多行blob数据(字符串)后,用户点击“搜索”按钮。 这会将“blob”发送给我的Api。

现在我相信这将是一个POST请求。 (如果我错了,请纠正我) 但我不确定接收输入的最佳数据结构是什么。

(我正在使用dropwizard)。

我应该如何将输入发送到我的api?我的意见应该是:

  1. 字符串
  2. 字符串数组(其中每一行是数组的一个元素)
  3. 我目前正在将Blob数据作为POST请求有效负载的一部分发送。

1 个答案:

答案 0 :(得分:1)

'blob'不是你拥有的。 blob是Binary Large Object,而textarea的内容绝对不是二进制而是简单文本。

Java JAX-RS REST API可以接收HTTP POST的正文:

@POST
public Respone postSearch(@RequestBody String searchFieldContent) {
  // do search
  // return Response
}

我建议不要使用POST进行搜索(可能是RPC),而是使用GET。构建一个查询参数,如

GET /api/things?search=what the user entered into the textarea

可以映射到

@GET
public Response searchThings(@RequestParam("search") String searchParam) {
  // do search
  // return Response
}

修改

使用POST进行搜索不是RESTful。如果您不能使用GET,更好的方法是将搜索建模为具有状态的单独资源。

客户端:

POST /api/searches

the long text the user entered in the textarea

服务器:

201 Created
Location: /api/searches/id-of-search-created-by-server

客户端

GET /api/searches/id-of-search-created-by-server

服务器:

200 OK
Content-Type: application/json

{
  "query": "the long text the user entered in the textarea",
  "state", "finished",
  "result": {
    "length": 23,
    "documents: [
      {
        "id": "id of first search hit",
        "title": "some title"
      },
      ...
    ]
  }
}