2014-03-25 86 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