REST – 如何建模与关系数据的关系

假设我有以下两个根资源:

.../organizations
.../persons

GET on … / organizations / id返回有关特定组织的所有信息,例如名称,位置等.

GET on … / persons / id返回有关特定人的所有信息,例如姓名,年龄,性别等.

模拟组织中人员的成员资格(用于检索和创建)的首选RESTful方法是什么?我不仅要为成员资格本身建模,还要添加额外的属性,例如加入组织的人员日期,他/她在组织中的角色,……

一些想法:

>如果我们提供… / organizations / id / persons / id,GET应该返回什么?只有会员资料(加入数据,角色……)和指向… / persons / id的链接? REST API用户可以使用该链接来获取有关此人的所有信息.
>我们是否有可能POST到… /人创建一个人,另一个/单独POST到… /组织/ id /人创建会员?
>进一步说,让我们说一个人必须始终是至少一个组织的成员.在这种情况下,我们需要一个POST来同时原子地创建人员和成员资格.

我们如何建模?最好,我想保留根资源… /组织和… /项目.在…… / organizations / id / persons上创建一个人是没有意义的,在… / persons /上创建成员资格也没有意义.

最佳答案 不会使用
HAL及其简单的格式满足您的需求吗?

假设我们为人员,组织和会员制定了资源
我们正在尝试检索与“42”标识的人有关的信息.

请求:

GET /persons/42 HTTP/1.1
Accept: application/hal+json

响应:

HTTP1.1 200 OK
Content-Type: application/hal+json
{
    "id": 42,
    "name": "Smith",
    "firstName": "John",

    "organization": {
        "id": 1234,
        "name": "blah",
        "href": "http://myserver/organizations/1234"
    },

    "membership": {
        "id": 5678,
        "name": "blih",
        "href": "http://myserver/memberships/5678"
    },

    "_links": {
        "self" : {
            "href" : "http://myserver/persons/42"
        }
    }
}

人员资源是指通过“组织”的上级组织
关系.该关系使您可以轻松导航到相应的组织
资源通过相应的href链接.

以相同的方式,成员关系允许访问相应的
会员资料(再次通过“href”链接),如果您考虑会员资格
将一个人与一个组织联系起来.

请求:

GET /memberships/5678 HTTP/1.1
Accept: application/hal+json

响应:

HTTP1.1 200 OK
Content-Type: application/hal+json
{
    "id": 5678,
    "name": "blih",

    "person": {
        "id": 42,
        "href": "http://myserver/persons/42"
    },

    "organization": {
        "id": 1234,
        "href": "http://myserver/organizations/1234"
    },

    "_links": {
        "self": {
            "href": "http://myserver/memberships/5678"
        }
    }
}

请注意,我并不是说上面的模型是适合您的模型
需求(例如,一个人可能属于多个组织,然后您需要序列化中的数组).

我的观点是,使用HAL可能会帮助您模拟您想要的内容.

点赞