2013-07-01 123 views
0

我试图用依赖关系设计两个不同资源之间的关系。场景是:REST:链接资源与依赖关系

两个资源,第一个叫做“account”,第二个叫做“person”。

在我的API中,“人物”资源是真实世界中具有姓名,年龄,性别,地址,电话等等的人的代表。帐户是负责认证人员的资源,例如登录。

所以,“人”的资源的表示看起来象下面这样:

{ 
    "id": "7828292", 
    "name": "Joseph Climber", 
    "email": "[email protected]", 
    "gender": "M", 
    "telephones": { 
     "main": { 
      "number": "898987777" 
     }, 
     "secondary": { 
      "number": "909099090" 
     }, 
     "business": { 
      "number": "937363902" 
     } 
    }, 
    "address": { 
         "rel": "address", 
         "href": "person/{ID}/address" 
     } 
} 

和“帐户”资源的表述是这样的:

{ 
    "id": "[email protected]", 
    "tokenAccess": "5E69FAE25F4B4F3E8CC5DE09A8163520", 
    "link": { 
     "rel": "person", 
     "href": "person/{id}" 
    } 
} 

我的问题是:当我创建一个新的人(POST人)我没有办法验证新人,在这种情况下,创建一个新帐户来完成此操作是必要的,所以这对于API消费者来说似乎有点混乱,因为API不会自然表达这种关系(一个好的API设计的基本概念)。

在账户和人员资源之间表示这种依赖关系的最佳方式是什么?

+0

你是什么意思“认证新人”?你在谈论API消费者吗? – Botis

回答

0

也许如果有人试图POST/person没有一个访问令牌,然后返回一个状态代码401 Unauthorized用身体是这样的:

{ 
    "@type": "error", 
    "description": "You must be authenticated to POST to person. If you do not have an account, then POST to /account to get an access token." 
} 

我想这将是直观足够使用API​​的开发。

+0

嗨,谢谢你的回答,但我认为这样API仍然困惑。 例如,我有另一个问题:如果创建两者的过程不同,我如何将帐户关联到某个人(反之亦然)? – Krock

+0

您能否详细说明您感到困惑?如果我打电话给'/ person',并返回错误信息'您必须先打电话给/ account',我不会觉得困惑 - 它告诉我该怎么做。这是因为用户在拨打电话之前不知道其依赖性?如果是这样,也许你把东西放在你的API文档中。 [Swagger](http://petstore.swagger.wordnik.com/)针对每个API调用都有一个免费的文本部分,您可以在其中向用户解释这样的内容。 – theon