tha*_*vin 17 api rest http mongodb
我在MongoDB商店之上构建了RESTful API,因此您可以存储数组.创建这样的新资源非常简单:
POST /users
{
items: [
1001, 1002, 1003
]
}
但是,添加新项目或删除项目的HTTP端点将如何?
现在,我必须指定整个数组,包括我不想触摸的元素:
PATCH /users/{id}
{
name: 'Bruce Wayne',
items: [
1001, 1002
]
}
或直接传入mongodb查询:
PATCH /users/{id}?query[$push][items]=1003
有一个更好的方法吗?
编辑:
我喜欢StackMob的API如何做到这一点.如何同时更新name和删除元素items?例如,当我在管理仪表板上更新一堆用户的详细信息时?我不认为在mongodb中更换整个阵列是一个好主意吗?
Dan*_*edo 14
传递mongodb查询似乎是一个坏主意.根据您的后端实现,它可能导致攻击者像SQL注入一样对数据执行错误操作
您可以使用PUT或PATCH对资源上的属性修改进行建模,但有一些限制:
PUT客户端时,期望发送资源的整个表示.它适合您,但可能很麻烦.PATCH客户端时,应该发送要更改的属性,而不是整个资源.但是,您必须发送整个值,而不仅仅是项的添加或删除值.它再次起作用,但你并不喜欢它.我认为您正在寻找一种方法来为数组添加和删除项目:
/users/:id/itemsPOST将项添加到数组并DELETE从数组中删除.它简单而且RESTful.
Pra*_*xit -1
根据 REST 标准创建和删除新请求 --> POST - 在集合中创建新资源并 DELETE - 删除资源
我可以给你一个例子,说明 java 中的高级 HTTP 端点如何使用 Jersey。您可以拥有一个指定了 HTTP 路径的资源类,以及执行不同操作的方法的特定路径。因此,URL 可能类似于 -- /rest/MyResource/Resource 并附有请求 JSON 或 XML(包含您的输入数据)
这是一个示例资源类,它将作为您的入口点(当然您必须在 web.xml 中进行配置才能为此类进行 URL 映射) -->
import javax.ws.rs.Consumes;
import javax.ws.rs.POST;
import javax.ws.rs.DELETE;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import org.json.JSONObject;
public class SampleRESTServiceResource {
/**
* @param incomingJsonString
* @return Response
*/
@POST
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public Response createNewResource(JSONObject myJson) {
// Do a call to a DAO Implementation that does a JDBC call to insert into Mongo based on JSON
return null;
}
/**
* @param incomingJsonString
* @return Return response
*/
@DELETE
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public Response deleteResource(JSONObject myJson) {
// Do a call to a DAO Implementation that does a JDBC call to delete resource from Mongo based on JSON
return null;
}
}
Run Code Online (Sandbox Code Playgroud)
如果您想尝试一个示例,可以参考此页面 --> https://www.ibm.com/developerworks/library/wa-aj-tomcat/
| 归档时间: |
|
| 查看次数: |
6767 次 |
| 最近记录: |