一开始我们使用CodeIgniter创建了一个项目,我们有一些控制器用于通过它的Web界面将外部NAS连接到数据库,简而言之我们有一堆需要API密钥的URL有权访问以避免来自调用API的外部来源的一般hackery。
API存在NAS必须执行的各种任务(管理订单,上传数据/图像等),因此我们有一些不同的控制器(即一个用于订单,图像等)所以API文件夹看起来像这样的东西:
controllers/apiv1/
orders.php
images.php
...
有些事情如下:
class Orders extends ApiController {
function Orders()
{
parent::ApiController();
}
function get_paid()
{
$shop = self::get_shop();
$this->load->model('order');
echo json_encode($this->order->by_status($shop->shop_id, Order::STATUS_PAID));
}
}
ApiController只是针对它试图访问的商店检查了APIKey。
现在我们正在将项目转移到Django,我只是想知道再次设置这个api的方法。我正在考虑为项目制作一个API应用程序,并将模型导入到views.py中并为一切创建一些函数,我的问题是有一种方法可以很好地分解所有内容(为各种事物分别编写单独的文件) )?或者我应该让views.py
充满所有内容并在网址中担心它。
还是有更好的方法吗?如果可能的话,我想将api分成像(api / v1,api / v2等)这样的版本,这样我们就可以将url路由到新的api而不会影响旧的api。如果我们有各种NAS使用不同版本的API(很难解释原因......),这可能会派上用场。
答案 0 :(得分:2)
您可以尝试使用Django Piston或Django-tastypie之类的内容来快速完成某些工作。 big 优于使用普通Django视图的优势在于,您可以完成大部分CRUD和序列化到JSON / Yaml / XML。
Tastypie带有内置shared-secret key authentication机制,并且不难找到Piston的等效代码。
编辑:顺便说一句,我最近一直在与Piston和Tastypie合作。我发现Tastypie更容易设置,代码库看起来更干净。也就是说,它缺少一些功能(虽然是1.0)但是我现在无法使用它。活塞很容易被鞋拔成任何你需要的东西,但代码似乎越来越停滞,作者似乎对开放问题没有很好的反应,你可能最终会得到你自己的叉子,你需要的错误修正您的应用程序正常工作。不是一个理想的情况。