很清楚如何创建一个从URL正则表达式调度的URLPattern:
(r'^books/$', books),
Run Code Online (Sandbox Code Playgroud)
这里的书可以根据要求的方法,还派遣:
def books(request):
if request.method == 'POST':
...
else:
...
Run Code Online (Sandbox Code Playgroud)
我想知道是否有一种惯用的方法在URLPattern中包含请求方法,将所有调度/路由信息保存在一个位置,例如:
(r'^books/$', GET, retrieve-book),
(r'^books/$', POST, update-books),
(r'^books/$', PUT, create-books),
Run Code Online (Sandbox Code Playgroud) 您好,目前我有一个应用程序,当用户点击"保存"时,它会遍历所有表单元素并创建一个管理:
var = params = [{
attributes1: form1.getValues(),
attributes2: form2.getValues(),
.. ..
}];
Run Code Online (Sandbox Code Playgroud)
然后我通过RPC POST将此批量对象发送到我的"实体"模型服务.我希望保留数据的这个实体非常复杂.总而言之,数据分布在大约30个表格中.为了帮助解释我的实际问题,"实体"是一个建筑物(如物理/房屋/公寓).
我想要的是能够将我的混乱变成RESTful API以保存属性.我遇到的问题是,保存跨越单个表的单个模型的详细信息很好.如何在模型具有的情况下构建数据对象以进行传输
例如:
这是我在房产和样本数据上可能拥有的WATERED版本
propertyId: 1,
locationId: 231234,
propertyName: "Brentwood",
kitchenFeatures: [
{ featureId: 1, details: "Induction hob"},
{ featureId:23, details: "900W microwave"}
],
propertyThemes: [ 12,32,54,65 ]
Run Code Online (Sandbox Code Playgroud)
这实际上还有很多......但你可以得到一般的要点.kitchenFeatures将是一个多对多的例子,我有一个featuresTable具有如下所有的功能:
`featureId`, `feature`
1 "Oven Hob"
23 "Microwave"
Run Code Online (Sandbox Code Playgroud)
和propertyThemes将是另一个多对多的例子.
我希望如何形成我的RESTful服务的"对象"?这甚至可能吗?
即.如果我想保存这个属性,我会发送给:
http://example.com/api/property/1
是否有类似XHR的浏览器API可用于通过HTTP将二进制文件流式传输到服务器?
我希望随着时间的推移制作HTTP PUT请求并以编程方式创建数据.我不想一次创建所有这些数据,因为它可能会在内存中出现.一些psueudo代码来说明我所得到的:
var dataGenerator = new DataGenerator(); // Generates 8KB UInt8Array every second
var streamToWriteTo;
http.put('/example', function (requestStream) {
streamToWriteTo = requestStream;
});
dataGenerator.on('data', function (chunk) {
if (!streamToWriteTo) {
return;
}
streamToWriteTo.write(chunk);
});
Run Code Online (Sandbox Code Playgroud)
我现在有一个Web套接字解决方案,但更喜欢常规HTTP,以便更好地与一些现有的服务器端代码互操作.
编辑:我可以使用最前沿的浏览器API.我正在查看Fetch API,因为它支持请求体的ArrayBuffers,DataViews,Files等.如果我能以某种方式伪造其中一个对象,以便我可以使用动态数据的Fetch API,这对我有用.我尝试创建一个Proxy对象,看看是否有任何方法被调用,我可以修补.不幸的是,似乎浏览器(至少在Chrome中)正在使用本机代码而不是JS版本进行读取.但是,如果我错了,请纠正我.
我有一个关于REST API设计的问题.这是一个简单的(可能太简单)API:
GET /ecommerce/order/123
POST /ecommerce/order (create a new order)
PUT /ecommerce/order/123 (update an existing order)
DELETE /ecommerce/order/123 (cancel order)
Run Code Online (Sandbox Code Playgroud)
但是,如果我希望客户输入订单被取消的原因怎么办?我需要将发布数据发送到API,但这不适用于DELETE.为了迎合这一点,我必须将DELETE更改为PUT.然后我会发布两个不同的资源进行更新和取消.
另一种解决方案是更改API:
GET /ecommerce/order/123
POST /ecommerce/order/create (create a new order)
PUT /ecommerce/order/update/123 (update an existing order)
DELETE /ecommerce/order/cancel/123 (cancel order)
Run Code Online (Sandbox Code Playgroud)
我不确定哪个是最好的选择.
关于REST API如何处理单个资源的多个命令有一个更普遍的问题.
任何输入将不胜感激!我很快就会在练习中阅读REST,但这个问题正在扼杀我.
我正在尝试通过PUT请求传递请求参数,在基于Grails的应用程序.
我正在使用以下客户端代码发出请求:
$.ajax({
url: 'api/controllerName/anId',
type: 'PUT',
data: $('form').serialize()
})
Run Code Online (Sandbox Code Playgroud)
使用以下映射:
"/api/$controller/$id?" {
action = [ GET: "read", POST: "create", PUT: "update", DELETE: "delete"]
}
Run Code Online (Sandbox Code Playgroud)
但我的控制器的动作收到空的参数列表,只有id值.我试着将内容添加到日志中并仅查看:
[id:anId, action:[GET:read, POST:create, PUT:update, DELETE:delete], controller:controllerName]
Run Code Online (Sandbox Code Playgroud)
并request.getParameterNames()返回空的值列表.
正如我在FireBug中看到的那样,请求包含此参数,并将Content-Type设置为 application/x-www-form-urlencoded; charset=UTF-8
如果我正在使用GET/POST方法 - 一切都按预期工作,我可以获得所有传递的参数.
我怎样才能访问传递的参数?
更新:我刚认为PUT意味着将数据作为JSON/XML传递到正文中.顺便说一句,这个问题仍然是实际的,以防万一
我正在使用WcF身份验证服务创建WCF Web服务,我需要的第一组功能是管理客户端的收件箱.客户端将由身份验证确定.
这是我尝试REST的REST设计:
https://api.mydomain.com/v1/inbox/messages (GET)
使用可选的搜索过滤器返回收件箱中的结果页面
https://api.mydomain.com/v1/inbox/mark (POST)
标记一条或多条已读或未读的邮件
https://api.mydomain.com/v1/inbox/archive (POST)
归档一条或多条消息
我这样做了吗?如果没有,那么设计这个界面会有什么更好的方法呢?
根据HTTP 1.1.规格:
如果Request-URI未指向现有资源,并且该URI能够被请求用户代理定义为新资源,则源服务器可以使用该URI创建资源.
换句话说,PUT可用于创建和更新.更具体地说,如果我做一个PUT请求,例如
PUT /users/1
Run Code Online (Sandbox Code Playgroud)
并且该用户不存在,我希望此请求的结果是创建具有此ID的用户.但是,如果您的后端使用自动增量键,这将如何工作?如果它不可行(例如自动增量为6并且我请求10)并且如果可能(例如请求7)创建,那么它是否会简单地忽略它?
从我上面提到的片段看来它似乎给你这种灵活性,只是寻找一些澄清.
对于 REST 和 ASP.NET Web API,即使 DTO 负载(例如 JSON)本身指定了标识符,是否也需要将标识符添加到 PUT 操作方法的路由中?
例如:
public void Put(int id, [FromBody]SomeDto someDto) // someDto has an 'Id' property
Run Code Online (Sandbox Code Playgroud)
ASP.NET Web API 模板包含该id参数,我见过很多这样的例子。
相比之下,是否可以省略该id参数并仍然遵守 REST 准则?例如:
public void Put([FromBody]SomeDto someDto)
Run Code Online (Sandbox Code Playgroud) 我尝试谷歌搜索和搜索到处,但无法找到关于这个主题的最终权威.虽然忠于REST原则,但我应该如何设计HTTP接口:
有序列表(获取,添加,插入位置,重新排序,删除)
一套(获取,添加,删除)
哈希表(获取,添加,删除)
注意:这些数据结构包含对已知ID的现有资源的引用
rest ×7
http ×5
api ×2
put ×2
browser ×1
django ×1
django-urls ×1
file-upload ×1
grails ×1
http-verbs ×1
java ×1
javascript ×1
performance ×1
php ×1
python ×1
wcf ×1