将API从CodeIgniter移动到Django的最佳方法

时间:2010-11-30 06:31:30

标签: django api web-applications codeigniter

一开始我们使用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(很难解释原因......),这可能会派上用场。

1 个答案:

答案 0 :(得分:2)

您可以尝试使用Django PistonDjango-tastypie之类的内容来快速完成某些工作。 big 优于使用普通Django视图的优势在于,您可以完成大部分CRUD和序列化到JSON / Yaml / XML。

Tastypie带有内置shared-secret key authentication机制,并且不难找到Piston的等效代码。

编辑:顺便说一句,我最近一直在与Piston和Tastypie合作。我发现Tastypie更容易设置,代码库看起来更干净。也就是说,它缺少一些功能(虽然是1.0)但是我现在无法使用它。活塞很容易被鞋拔成任何你需要的东西,但代码似乎越来越停滞,作者似乎对开放问题没有很好的反应,你可能最终会得到你自己的叉子,你需要的错误修正您的应用程序正常工作。不是一个理想的情况。