我試圖用docopt實現HTTPie的CLI,但由於某些原因,我無法使METHOD成爲第一個參數。我已經刪除了大部分選項來隔離此問題。在docopt中實現HTTPie
此外,HTTPie的作者獲得請求項目的方式似乎與docopt文檔錯誤,所以想知道實現該項目的最佳選擇是什麼。
爲HTTPie完整的文檔:https://github.com/jkbr/httpie
我docopt例如:https://gist.github.com/dasickis/4711926
我試圖用docopt實現HTTPie的CLI,但由於某些原因,我無法使METHOD成爲第一個參數。我已經刪除了大部分選項來隔離此問題。在docopt中實現HTTPie
此外,HTTPie的作者獲得請求項目的方式似乎與docopt文檔錯誤,所以想知道實現該項目的最佳選擇是什麼。
爲HTTPie完整的文檔:https://github.com/jkbr/httpie
我docopt例如:https://gist.github.com/dasickis/4711926
docopt是貪婪時嘗試匹配的模式。所以,如果你模式是:
usage: http [METHOD] URL [ITEM...]
並運行$ http google.com bla
然後docopt將匹配google.com
爲METHOD
,因爲,喲,這是第一個位置參數! docopt在這種情況下沒有信息來扣除METHOD
應該如何。但是,如果你有以下用途:
usage: http [get|post|put|delete] URL [ITEM...]
然後,它知道,如果它不是get/post/put/delete
,那麼它應該是一個URL
。但是,我可以看到這不是最優的:1. httpie使用大寫名稱(它被解釋爲位置參數,而不是docopt的命令),2.如果有很多命令,則使用可能會變成一長串。
如果你不關心與httpie的兼容性,我會用(A)小寫命令,因爲命令按照慣例是小寫的。另一個不兼容的設計決策將是(B)要求METHOD
:
usage: http METHOD URL [ITEM...]
這樣,你做的使用模式無歧義。 (C)我會怎麼做,以保持兼容性,我想作以下用途:
usage: http URL [ITEM...]
http METHOD URL [ITEM...]
在這種情況下,第二子圖案永遠不會匹配(docopt不知道URL和方法的話,這使得所述第一圖案的第二的超集),然後我會分解的參數爲:
positional_arguments = [args['URL']] + args['ITEM']
,然後手動解析positional_arguments
,取決於第一參數是否看起來像URL,或類似的請求的動詞。
對不起,docopt不處理這個案件優雅,我會更多地考慮這個用例。如果您有任何建議,請創建問題:https://github.com/docopt/docopt/issues
P.S.你是對的,REQUEST ITEM
是錯誤的,非常非常規和混亂。它應該是REQUEST-ITEM
或REQUEST_ITEM
或只是ITEM
。
FWIW,'REQUEST ITEM'已被更改爲'REQUEST_ITEM'。 –