Bermain API dengan Django-Tastypie

Ketika anda membuat sebuah aplikasi berbasis web, mungkin akan ada saat nya anda ingin supaya data yang ada dalam web aplikasi anda bisa diakses oleh situs lain atau diakses dari perangkat lain seperti Mobile phone atau perangkat mobile lainnya.

Salah satu cara yang paling efektif sekarang ini adalah dengan menyediakan API (Application Programming Interface) sehingga yang ingin mengakses data anda bisa melalui API yang anda sediakan, dan si peng-akses bisa mendapatkan data berupa JSON/XML yang mudah diolah.

Nah, untung nya di Django banyak aplikasi-aplikasi yang bisa anda tambahkan untuk keperluan pembuatan API ini seperti Django-Piston dan Django-Tastypie.

Kali ini yang akan kita pergunakan adalah Django-tastypie, karena Django Tastypie ini yang sering saya gunakan :). Seperti biasa contoh penggunaan nya akan saya bagi ke dalam PROBLEM, SOLUSI dan CODES. Saya lebih suka cara menulis seperti ini karena bisa mengontrol cara saya menjelaskan sesuatu dan juga sepertinya lebih mudah buat pembaca mengikutinya.

PROBLEM

Misalnya kita ingin membuat sebuah API sederhana dimana dengan API tersebut kita bisa mengakses data feed terbaru dari aplikasi Microblogging yang kita buat dengan Django.

Pada tahap pertama kita hanya akan membuatkan API public yang read-only, artinya aplikasi ini bisa diakses oleh publik dan hanya terdapat akses baca saja. Misal membaca feed terbaru dari aplikasi micro blogging kita.

SOLUSI

Ada sebuah aplikasi Django yang bisa dipakai untuk itu yaitu Django Tastypie. Berbekal Tastypie ini kita akan membuat sebuah API sederhana dalam waktu singkat.

Sebelum memulai kita sepesifikasikan dulu fitur API nya sebagai berikut:

  1. API hanya terbatas akses read-only saja, user tidak dapat memposting/update status melalui API ini, hanya dapat membaca feed/satus.
  2. API akan memberikan data berformat JSON, sepertinya ini lebih gampang dipergunakan di klien side.

Ok segitu aja cukup untuk sementara secara ini hanya studi kasus sederhana, dan sekarang kita akan mulai coding nya.

CODES

Pertama karena ini hanya pembuatan API kita tidak akan bahas bagaimana struktur feed aplikasi microblogging kita. Namun kira kira seperti ini model nya:

# Aplikasi Feeds
# file: models.py

class Feed(models.Model):
    user = models.ForeignKey(User)
    status = models.CharField(max_length=140)
    created = models.DateTimeField(auto_now_add=True)

Ok sekarang kita akan install Tastypie nya, saya lebih suka install aplikasi atau module python dengan PIP, kalau anda gunakan cara lain silahkan.

> pip install django-tastypie

Sekarang kita tambahkan Tastypie ke INSTALLED_APPS settings.py project kita.

INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'django.contrib.admin',
    'feeds',
    'tastypie', # ini tastypie kita

Nah sekarang semua sudah terinstall, sekarang saat nya kita membuat sumber data yang akan dikeluarkan oleh API kita.

Di Tastypie, sumber data sebuah API disebut sebagai Resource (sumber data), sumber data ini bisa datang langsung dari database atau sumber data lainnya.

Karena kita ingin membuat API untuk feed, dan data nya pastinya berasal dari Model(database) untuk itu resource yang kita pakai disebut ModelResource. Enough speaking, lets coding..

# File: api.py
# berada di dalam aplikasi feeds.

from tastypie.resources import ModelResource
from feeds.models import Feed

class FeedResource(ModelResource):
    class Meta:
        queryset = Feed.objects.all()
        resource_name = 'feed'

Ok Resource feed kita sudah selesai, sekarang saat nya menghubungkan Recource yang kita buat ini dengan URL, sehingga bisa diakses lewat URL (http://mymicroblog.com/api/v1/feed) untuk listing semua feed terbaru, dan (http://mymicroblog.com/api/v1/feed/10) untuk mendapatkan single feed dengan ID = 10.

Untuk itu buka file urls.py aplikasi feeds, dan tambahakan kode berikut:

# urls.py
# di dalam aplikasi feeds

from django.conf.urls.defaults import *
from tastypie.api import Api

from feeds.api import FeedResource

my_api = Api(api_name='v1') # Api dengan versi? how cool is that?
my_api.register(FeedResource())

urlpatterns = patterns('',
    #... 
    #... urls sebelum nye disini...
    #...

    (r'^api/', include(my_api.urls)),
)

Whoaaa.. kita sudah selesai untuk coding API sederhana kita, siap dicoba ya.. Kalau semua coding benar, tinggal jalankan server dan coba arahkan browser ke:

http://mymicroblog.com/api/v1/feed/?format=json

# dan

http://mymicroblog.com/api/v1/feed/1?format=json

Apa yang muncul? silahkan cek sendiri ya :D, yang pasti nanti akan muncul data feed dengan format json.

CATATAN

Ingat, mymicroblog.com hanya URL fiktif untuk keperluan tutorial ini,  ga tau ada atau tidak. Don’t care..

Saat kita mengakses URL API melalui browser, kita perlu menambahkan ?format=json ini hanya kita lakukkan ketika perlu mengakses lewat browser, karena browser pada dasar nya tidak tau apa format yang dikembalikan API, parameter ?format=json ini berfungsi untuk memberitahu browser “Hey ane kasi lo data dengan format JSON jack..” jaga baik baik yak.. 🙂

Ok segitu saja dulu kali ini untuk Tastypie, ini hanya basic nya saja ya, masih banyak hal gokil bisa dilakukkan dengan Tastypie ini seperti password protected API, API Key, Authentication dan lain sebaginya.

Semoga pengenalan singkat ini bisa menjadi pemicu awal buat anda yang ingin membuat web service dengan Django. See ya..

Untuk lebih memperdalam tentang Django Tastypie silahkan ke sini.

5 Replies to “Bermain API dengan Django-Tastypie”

  1. ka ada tutorial django_pistonya ga? aku lg nyusun TA penelitiannya bkin web service u apps android, kalau ada referensi tolong ya ka, makasih ka

Leave a Reply

Your email address will not be published. Required fields are marked *