开发者

Best way to move API from CodeIgniter to Django

开发者 https://www.devze.com 2023-01-27 18:51 出处:网络
In the beginning we made a project using CodeIgniter and we had some controllers that were used to connect an external NAS to the database via it\'s web interface, to cut a long story short we had a b

In the beginning we made a project using CodeIgniter and we had some controllers that were used to connect an external NAS to the database via it's web interface, to cut a long story short we had a bunch of URL that required an API key to have access to avoid general hackery from outside sources calling the API.

The API existed for various tasks the NAS had to do (manage orders, upload data/images etc.), so we had a few different controllers (ie. one for Orders, Images, etc.) So the API folder looked something like this:

controllers/apiv1/
   orders.php
   images.php
   ...

Something along the lines of this:

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::S开发者_如何学编程TATUS_PAID));
}
}

Where the ApiController just checked the APIKey against the Shop that it was trying to access.

Now we are moving the project to Django, and I was just wondering the be way to setup this api again. I was thinking of making an API app for the project and importing the models in to the views.py and make some functions for everything, my problem here is there a way to break everything up nicely (into separate files for each of the various things)? Or should I just have the views.py full of everything and worry about it in the urls.

Or is there a better way? If possible I would like to separate the api into versions like (api/v1, api/v2, etc.) so that we can just route the urls to the new api without affecting the old. This may come in handy if we have various NAS's using different versions of the API (Hard to explain why...)


You could try using something like Django Piston or Django-tastypie to quickly get something working. The big advantage over using normal Django views is that you get most of the CRUD and serialization to JSON/Yaml/XML done for you.

Tastypie comes with a built-in shared-secret key authentication mechanism, and it's not difficult to find the equivalent code for Piston.

EDIT: BTW, I've been working with both Piston and Tastypie recently. I find Tastypie is easier to setup and the code base looks cleaner. That said, it lacks some features (coming on 1.0 though) that makes it impossible for me to use it at the moment. Piston is very easy to shoehorn into whatever you need, but the code seems to be growing stagnant, the author doesn't seem to be very responsive about open issues and you'll probably end up having your own fork with the bugfixes you need for your application to work properly. Not an ideal situation.

0

精彩评论

暂无评论...
验证码 换一张
取 消