2010年5月6日 星期四

制作簡單的 API: 在 Django 中回傳 JSON

將 HttpResponse 的 mimetype 設為 json 即可, 程式如下:
# views.py
def myapi(request):
    data = {
       'name': 'Alice',
        ...
    }
    return HttpResponse(simplejson.dumps(data), mimetype='application/json')

設好 urls.py 後 (/myapi/), 就能用 jQuery 的 $.ajax 輕鬆地 call /myapi/ 取得 JSON ( callback function 的參數會是 JavaScript object, 不用再呼叫 JSON.parse )。為了減少出錯的機會, 我將 ajax 的參數 aysnc 設為 false。

回傳值是 JSON 有許多好處, 除方便用 AJAX 拿資料外, 也方便寫 unit test:
class MyApiTest(django.test.TestCase):
    data = { ... }
    response = self.client.post('/myapi/', data)
    self.assertEqual(200, response.status_code)
    expected = { ... }
    self.assertEqual(expected, simplejson.loads(response.content))

附帶一提, 有人寫了個 decorator 將一般的 view 轉成回傳 json, 目前沒這需求, 留著備忘。

沒有留言:

張貼留言

在 Fedora 下裝 id-utils

Fedora 似乎因為執行檔撞名,而沒有提供 id-utils 的套件 ,但這是使用 gj 的必要套件,只好自己編。從官網抓好 tarball ,解開來編譯 (./configure && make)就是了。 但編譯後會遇到錯誤: ./stdio.h:10...