我正在幫助爲現有的數據庫開發新的API。用於POST和PUT的RESTful API和外鍵處理
我使用Python 2.7.3,Django的1.5和Django的REST的架構在PostgreSQL 9.1 2.2.4
我需要/想的API好的文檔,但是我缺兵少將,我恨編寫/維護文檔(我的許多缺陷之一)。
我需要允許API的消費者添加新的「POS」(銷售點)位置。在Postgres數據庫中,有一個從pos到pos_location_type的外鍵。所以,這是一個簡化的表結構。
pos_location_type(
id serial,
description text not null
);
pos(
id serial,
pos_name text not null,
pos_location_type_id int not null references pos_location_type(id)
);
所以,讓他們來發布新的POS機,他們將需要給我一個「pos_name」的一個有效pos_location_type。所以,我整個週末都在讀這些東西。那裏有很多爭論。
我的API消費者如何知道pos_location_type是什麼?或者在這裏傳遞什麼值?
看來我需要告訴他們在哪裏得到pos_locations的有效列表。喜歡的東西:
GET /pos_location/
作爲一個快速的注意,pos_location_type描述的例子可能是:( '學校', '公園', '辦公')。
我真的很喜歡Django REST框架的「可瀏覽性」,但它似乎沒有涉及這種類型的事情,而且我今天早些時候與湯姆克里斯蒂在IRC上聊了一個非常愉快的聊天記錄,他在這裏做什麼並沒有真正的答案(或者我從來沒有明確提出過我的問題)。
我看過Swagger,這是一個非常酷的/有趣的項目,但看看他們的「寵物」資源在他們的demo here。注意它與我需要做的非常相似。要添加新的寵物,您需要傳遞一個類別,它們將其定義爲類別類別(id:long,name:string)。消費者如何知道要通過什麼?什麼是有效的ID?或名字?
在Django rest框架中,我可以定義/覆蓋在OPTION調用中返回的內容。我想我可以拿出自己的小「系統」在這裏,回到像一些信息:
pos-location-url: '/pos_location/'
在通用形式
,這將是:{}資源-url:「/路徑/要/ resource_list」
這樣的文件方面的工作,但我不知道這是否真的是一個很好的解決方案編程。如果我更改資源位置,該怎麼辦?這意味着我的消費者需要以編程方式使OPTION調用資源來找出所有關係。也許不是一件壞事,但感覺有點奇怪。
那麼,人們如何處理這種事情呢?
最後說明:我得到的事實,我真的不希望在這裏一個「泄漏」 abstaction,並有我的數據庫峯值直通API層,但事實仍然說是有這個一個foreign_key約束現有數據庫而任何沒有有效的pos_location_type_id的插入都會引發錯誤。
此外,我並不是試圖打開URI與ID辯論。對於這個的討論,用戶是否必須使用pos_location_type_id int值或URI並不重要。無論哪種情況,他們都不知道要發送給我什麼。
感謝您的回覆。我不確定我瞭解你的建議。 API消費者如何知道他們需要發佈到/ pos/new_york/vs/pos/new-york/vs./pos/ny/vs/pos/nyc/ – 2013-03-18 18:37:10
你是對的,我編輯了我的答案,但如果地點是固定的,那麼我認爲向用戶展示可能性是唯一的選擇。 – PepperoniPizza 2013-03-18 19:31:27
感謝您的回覆和編輯。順便說一句,爲了清晰起見,我編輯了我的問題。它不像location_type(比如:學校,公園,零售店,辦公室)那麼位置(如城市)。 – 2013-03-18 20:22:12