2014-03-25 82 views
0

我刚开始使用Apiary,我无法分辨这是产品的限制还是只是我不理解要做什么。Apiary的多种身份验证方法

我正在记录一个API,它将用户认证为每个请求的一部分。有时,身份验证是路径的一部分(对用户配置文件的请求会在路径中包含用户标识),其他时间只是参数(?user_id = 1 & auth = secret),对于POST请求,部分入局身为JSON。

此外,应用程序中有3种验证方法。您可以使用Facebook UID,电子邮件地址或使用您正在使用的设备的唯一ID登录。其结果是一些看起来像这样:

##User [/user/{facebook_uid}{?access_token}, /user/{email}{?device_id}, /users/{device_auth_id}{?device_id}] 

这工作得很好,并显示在API中为我期望:

enter image description here

但这导致2个问题:

1)如果我想添加所有认证方法共享的一组参数,我需要将它添加到全部3中,如下所示:

## User [/user/{facebook_uid}{?access_token, extra_thing, this_too}, 
/user/{email}{?device_id, extra_thing, this_too}, 
/users/{device_auth_id}{?device_id, extra_thing, this_too}] 

这似乎有点凌乱,它会是好得多的路径数组的结尾应用共享的参数,使它们适用于所有,这样的事情:

## User [/user/{facebook_uid}{?access_token}, /user/{email}{?device_id}, /users/{device_auth_id}{?device_id}]{&extra_thing, this_too} 

但是,这是行不通的。有没有办法做到这一点?这些文档对于像这样更复杂的东西并不是很有用。

另外,有没有办法创建某种模板,我可以适用于我所有的方法?在身份验证是路径的一部分的情况下,它有点不可避免,但对于其他请求,只需执行诸如include: authentication之类的操作并让它从某个定义的模板中抽取unique_id/auth组合即可。

谢谢!

回答

1

首先,没有真正支持拥有多个资源表示的单一模型。这是一件不寻常的事情,实际上是思考的好去处。

其次,在[path segment]中使用多个URI可能会让Apiary的模拟服务器混淆并使其无法使用。

在我看来,我会分裂成这三种型号:Facebook UserE-mail UserDevice User,略有不同的文档

(他们是如何创造你真的可以通过API创建所有的等等等等?)

这也取决于你如何记录这一点。由于路径段不进行验证(这将是奇怪的基础上的参数的类型有不同的资源),你可以有(和我个人做到这一点)

## User [/user/{id}{?access_token, extra_thing, this_too}] 

+ Parameters 
    + id (required, string, `[email protected]`)...id of the user. Can be either user's e-mail, facebook id or device id from where user was created. 

至于可重用的部分,这是currently being implemented与认证being part of that

+0

我明白了,这很有道理。根据您所说的参数获得不同的资源会很奇怪,因此我认为您在底部提供的示例是现在就开始实施的最佳方式。我不认为我们是唯一拥有多个指向相同资源的URI,如果他们将来支持(不会像您所说的那样破坏服务器),那将会很好。 – JMRboosties

+0

那么你可以使用[资源模型](https://github.com/apiaryio/api-blueprint/blob/master/examples/8.%20Resource%20Model.md),但它与使用情况略有不同你所描述的(一个模型在那里,而你实际上有一些稍微不同的模型)。 – Almad