这是我的例子';引入国家';或以其他方式违反REST/OData标准?

这是我的例子';引入国家';或以其他方式违反REST/OData标准?,rest,Rest,我正在嵌入式设备上实现HTTP接口,以允许通过REST请求远程控制设备。RESTAPI由负责创建远程控制软件的合作伙伴公司指定。在我这方面,所有内容都是在内存紧张的情况下用C编写的,这意味着REST接口需要与设备的操作方式轻松紧密地耦合 我的问题是,嵌入式设备基本上的工作方式不太适合他们指定的REST接口。从我的角度来看,我已经提出了一个可行的建议,但他们的开发人员只是简单地回答说它“引入了state”并且“不再是REST” 下面的例子将说明他们最初想要做什么 对给定资源路径的GET将返回一个或

我正在嵌入式设备上实现HTTP接口,以允许通过REST请求远程控制设备。RESTAPI由负责创建远程控制软件的合作伙伴公司指定。在我这方面,所有内容都是在内存紧张的情况下用C编写的,这意味着REST接口需要与设备的操作方式轻松紧密地耦合

我的问题是,嵌入式设备基本上的工作方式不太适合他们指定的REST接口。从我的角度来看,我已经提出了一个可行的建议,但他们的开发人员只是简单地回答说它“引入了state”并且“不再是REST”

下面的例子将说明他们最初想要做什么

对给定资源路径的
GET
将返回一个或多个JSON对象,如下所示。每个对象都有一个真正唯一的索引,加上它所属的组号,再加上一个状态

[
    {
        "index" : "123",
        "group" : "2",
        "someState" : "false"
    },

    {
        "index" : "124",
        "group" : "2",
        "someState" : "false"
    },

    {
        "index" : "125",
        "group" : "3",
        "someState" : "false"
    },

]
PUT
到该资源路径和该对象的索引,例如
some\resource-123
更改该对象的状态,使得
someState
现在将为
true

对该资源和索引执行
DELETE
操作将完全“删除”该对象

现在,我面临的问题是,由于设备的工作方式,您可以单独删除对象,但只能将对象放入给定组中,即一次翻转所有对象的某个状态。这是由嵌入式设备的行为决定的——这是一种无法改变的基本行为

我的建议是,不能对资源和索引进行
PUT
;必须向资源和组发送。例如,
PUT
some\resource-2
将设置上述数组中前两个对象的
someState
。从遥控器UI的角度来看,这将很好地工作,我们都会很高兴。但是开发商喊不!这不是休息!!!!一个人拒绝了我的想法

我是如何通过提出这一点来“介绍国家”的


如果我的建议不好,小猫确实会因此死亡,那么有没有更好的方法可以将对象表示为REST资源,并允许在上述约束条件下更改它们的状态?

听起来好像一个组中的所有对象都必须具有相同的状态?如果是这样,我建议您让他们将组作为端点公开,并将someState作为组属性。这将减轻他们对引入状态的担忧,并允许您在组级别上设置状态。单个对象仍可以将状态作为只读属性公开

GET /groups/3
{
   "id": 3,
   "someState": true
}
PUT /groups/3  <!-- sets the state of all objects in the group -->
{
   "id": 3,
   "someState": false
}
GET /objects/5
{
        "index" : "123",
        "group" : "2",
        "someState" : "false"
}
GET/groups/3
{
“id”:3,
“someState”:真的吗
}
PUT/groups/3
{
“id”:3,
“某物状态”:假
}
获取/objects/5
{
“索引”:“123”,
“组”:“2”,
“someState”:“false”
}

+1。谢谢你,埃里克。非常感谢。这真是个好主意。@Trevor不用担心。我希望外部开发人员能够做到这一点。:-)只是出于兴趣,有人能对我最初提出的计划发表意见吗?说它将“不再让它休息”并“引入国家”是正确的吗?