2015-04-17 68 views
9

我正在使用Api Blueprint爲RESTful搜索API開發api文檔。我希望能夠通過過濾器的API,所以我可以組裝:Api Blueprint可以理解的二維鍵值格式是什麼?

filter[filtername1]=filtervalue1 
filter[filtername2]=filtervalue2 

每這個問題,我使用百分比編碼的方括號,但不像這個問題,它不可能爲我們描述每可能的鍵名:

How to format hash-based parameters in the URL when creating Blueprint API doc?

我想要的鍵名是可變的,因爲它可能是在源數據的任何領域。這是否工作?

## Key-Value-Test [/api/v1/keyvaluetest?term={term}&filter%5B{field_name}%5D={field_value}] 

+ term 
+ filter_field 
+ filter_value 

是否有像這樣的二維數組的推薦格式?似乎這不會在Dredd工作,因爲+ filter_field並不真正匹配filter[filter_field]

回答

3

API藍圖使用URI Templates standard。有很多方法來表達和擴展陣列(見section 3.2.1),但是,它預計「標準URI辦法」,這意味着URI將擴大如下:

/api/v1/keyvaluetest?term=yourterm&filter=filtervalue1&filter=filtervalue2

這是做一個「標準」的方式數組,除了最流行的Web語言在2000年代流行起來以外。

這些模板是爲擴展而設計的:給它一大堆變量和一個字符串,你會得到一個格式正確的字符串。據我所知,沒有「野性匹配」(在字符串的某個位置插入模式匹配變量)。

我的URL模板的領域裏想到的唯一的解決辦法是採取爆炸改性劑的優點(參見composite values):

/api/v1/keyvaluetest{?keys*}

其中,給定的值的關聯數組[(filter%5Bfiltername1%5D, filtervalue1), (filter%5Bfiltername2%5D, filtervalue2) ]應該擴大正常。

但是,我不確定如何指定MSON中的那些,因爲我不認爲支持「動態密鑰」,並且我認爲大多數工具都無法處理它(還)。

可能是worth asking

5

恐怕API藍圖和Apiary尚未允許這些類型的動態URL定義。

API藍圖和蜂房僅允許URI模板作爲RFC 6570

以下URI模板定義根據該RFC

GET /resource?year={year}&month={month} 

您可以更改URL來定義類似下面是無效的:

## Key-Value-Test [/api/v1/keyvaluetest{?term,field_name,field_value}] 

+ Parameters 
    + term: a 
    + field_name: b 
    + field_value: c 

有兩點需要說明用這種方法:

  • 您只能給出參數的一個字段名稱和字段值。如果您需要更多字段參數,則必須擴展URL。
  • 你必須改變我認爲你不會想要的API網址。

如果您有任何請求,請在http://support.apiary.io處啓動功能請求。

+0

可能值得一提的是,@PavanKumarSunkara是一名Apiary開發人員。 –

+1

請注意,URI模板似乎不正確。而不是「?term = {term}」,您只需要「{?term}」,請參閱https://github.com/apiaryio/api-blueprint/blob/master/API%20Blueprint%20Specification.md#uri-template-變量 – Zdenek

+0

也相關 - http://support.apiary.io/knowledgebase/articles/106871-uri-templates-support – Zdenek

相關問題