Rabu, 07 Juli 2021

Membuat REST API Pada Django


Sebelum kita membuat REST API pada Django Framework,baiknya mengetahui dulu pengertian dari REST API itu sendiri. Agar lebih mudah untuk memahami pembuatan dan tujuan project ini.


Pengertian REST API

REST (Representational State Transfer) Adalah sebuah arsitektur sederhana untuk membangun dan menghubungkan dengan layanan-layanan website. Biasanya ini ditampilkan ulang dalam bentuk JSON atau XML atau HTML yang bisa diakses,  dimodifikasi dan digunakan ulang oleh siapapun(devloper atau programmer).

API adalah singkatan dari Application Programming Interface. API adalah penerjemah komunikasi antara klien dengan server untuk menyederhanakan implementasi dan perbaikan software.Bisa diartikan juga sebagai sekumpulan perintah, fungsi, serta protokol yang dapat digunakan oleh programmer saat membangun perangkat lunak untuk sistem operasi tertentu. Biasanya menggunakan protokol standard HTTP tetapi untuk website atau blog interprise menggunakan HTTPS untuk melakukan operasi GET,POST dan PUT.

REST API memungkinkan para developer dan programmer dalam pengembangan applikasi yang berbasis data tergabung dengan applikasi yang berbeda dengan kebutuhan data yang sama. Seperti dalam pengembangan toko online yang membutuhkan API distributor atau pengirimnya sehingga pelanggan tidak pusing mencari jasa pengirimannya berikut harga dan perkiraan datang paket yang dibeli.Berikut ini cara membuat REST API sederhana yang bisa digunakan untuk semua orang.


Bahan Yang Digunakan

Python3.8

Django3.1

Console atau Command Prompt

Text Editor (Pycharm, Sublime, Notepad++, Vim atau lainya)


Proses Pembuatan Project

Mari kita buat suatu project untuk contoh kasus pembuatan keranjang pada toko online. Dimana keranjang ini bisa diisi oleh siapa saja, diganti ataupun dihapus isinya sesuai dengan keinginannya sendiri. Tetapi bila sudah selesai akan dipindahkan ke keranjang penjualan.

Pertama buat project dan applikasinya dengan menggunakan perintah


$ django-admin startproject project

$ cd project

$ python manage.py startapp api


Setelah mengeksekusi perintah-perintah diatas.Maka struktur project kita akan menjadi seperti ini

Rubahlah pengaturan pada file setting.py dalam folder project. Tambahkan daftar applikasi kita (api) pada baris INSTALLED_APPS.


INSTALLED_APPS = [

    ....

    'api',

]


Kemudian kita akan membuat databasenya pada file models.py di folder api dan menggantinya menjadi kode ini


from django.db import models

class CartItem(models.Model):

    product_name = models.CharField(max_length=200)

    product_price = models.FloatField()

    product_quantity = models.PositiveIntegerField()

    

Setelah memodifikasi file tersebut,kita harus menjalankan perintah


$ python manage.py makemigrations

$ python manage.py migrate


Bila berhasil maka kita akan msndapatkan notifikasi pembuatan tabel-tabel yang diperlukan pada applikasi kita melalui console atau command prompt.

Mari kita buat halaman administrator agar memudahkan dalam melihat perubahan data pada database di applikasi kita.Caranya cukup mudah yakni dengan mengganti isi file admin.py dengan kode dibawah ini


from django.contrib import admin

from .models import CartItem


admin.site.register(CartItem)


Daftarkan akun admin di halaman django admin melalui console atau command prompt dengan perintah


$ python manage.py createsuperuser


Lalu masukan nama, email dan passwordnya dengan benar.Untuk menjalankan applikasi kita jalankan perintah


$ python manage.py runserver


dengan mengakses url localhost:8000/admin maka akan tampil halaman login untuk masuk ke halaman sdministrasi django. Masukan nama dan password yang kita buat untuk akun admin tadi untuk melihat mengubah dan menghapus data di database applikasi kita.


Pembuatan REST API

Pertama kita akan menuliskan data pada keranjang. Sedangkan untuk yang lainya juga akan saya buat di satu artikel ini. Agar bisa langsung diterapkan pada project yang sedang dikerjakan. Operasi CRUD untuk REST API pada Django tambahan lainya yakni operasi Pencarian Data API dengan membuat fungsi-fungsi pada views yang digunakan untuk mengekseskusi perintah yang berkaitan dengan operasi-operasi yang ingin digunakan.

Mari kita membuat langkah pertama yakni menuliskan data pada keranjang.Dengan mengubah file views.py pada folder api dengan kode dibawah ini


from django.views import View

from django.http import JsonResponse

import json

from django.utils.decorators import method_decorator

from django.views.decorators.csrf import csrf_exempt

from .models import CartItem


@method_decorator(csrf_exempt, name='dispatch')

class ShoppingCart(View):

    def post(self, request):


        data = json.loads(request.body.decode("utf-8"))

        p_name = data.get('product_name')

        p_price = data.get('product_price')

        p_quantity = data.get('product_quantity')


        product_data = {

            'product_name': p_name,

            'product_price': p_price,

            'product_quantity': p_quantity,

        }


        cart_item = CartItem.objects.create(**product_data)


        data = {

            "message": f"New item added to Cart with id: {cart_item.id}"

        }

        return JsonResponse(data, status=201)

        

Ubahlah isi file urls.py pada folder project dengan kode berikut


from django.contrib import admin

from django.urls import path, include


urlpatterns = [

    path('admin/', admin.site.urls),

    path('', include('api_app.urls')),

]


Buatlah file urls.py pada folder api. Lalu ketiklah kode dibawah ini


from django.urls import path

from .views import ShoppingCart


urlpatterns = [

    path('cart-items/', ShoppingCart.as_view()),

]


Lalu jalankan server kita dengan kode


$ python manage.py runserver


Cara menuliskannya bisa dengan perintah curl di console atau command prompt.


$ curl -X POST -H "Content-Type: application/json" http://127.0.0.1:8000/cart-items/ -d "{\"product_name\":\"name\",\"product_price\":\"41\",\"product_quantity\":\"1\"}"


Bila kode yang kita buat benar maka akan muncul pemberitahuan di console atau command prompt seperti ini


{

    "message": "New item added to Cart with id: 1"

}


Atau bila mengkses url http://127.0.0.1:8000/admin/api_app/cartitem/, akan tampil daftar data yang ada.


B.Membaca Data(Read Data)

Langkah selanjutnya yakni membaca data yang ada pada database. Kita akan membuatnya fungsi untuk membaca sekaligus membuat hasil(bacaan) tersebut menjadi sebuah dictionary yang ditampilkan dalam bentuk JSON. Dengan menambahkan fungsi get() pada views.py


def get(self, request):

        items_count = CartItem.objects.count()

        items = CartItem.objects.all()


        items_data = []

        for item in items:

            items_data.append({

                'product_name': item.product_name,

                'product_price': item.product_price,

                'product_quantity': item.product_quantity,

            })


        data = {

            'items': items_data,

            'count': items_count,

        }


        return JsonResponse(data)


Mari kita coba dengan menggunakan di console atau command prompt dengan perintah ini


$ curl -X GET http://127.0.0.1:8000/cart-items/


Bila berhasil maka akan ada data dalam bentuk JSON pada console ata command prompt kita.


C.Memperbarui Data(Update Data)

Untuk memperbarui data, tentu saja harus ada data yang ingin diperbarui. Dimana data yang akan diperbarui akan ditentukan berdasarkan id yang dimiliki oleh data di database. Untuk melakukanya kita hanya perlu menggunakan 1 baris perintah pada console yakni


$ curl -X PATCH http://127.0.0.1:8000/update-item/1 -d "{\"product_quantity\":\"3\"}"


Tetapi sebelum menggunakan perintah diatas kita harus menambahkan fungsi patch() pada file views.py dan url pada file urls.py di folder api. Dibawah ini merupakan tambahan kode untuk file views.py.


@method_decorator(csrf_exempt, name='dispatch')

class ShoppingCartUpdate(View):


    def patch(self, request, item_id):

        data = json.loads(request.body.decode("utf-8"))

        item = CartItem.objects.get(id=item_id)

        item.product_quantity = data['product_quantity']

        item.save()


        data = {

            'message': f'Item {item_id} has been updated'

        }


        return JsonResponse(data)


Dan yang ini untuk urls.py. Tetapi baiknya mengimport fungsi ShoppingCartUpdate agar tidak terjadi error.

path('update-item/<int:item_id>', ShoppingCartUpdate.as_view()),


D.Menghapus Data(Delete Data)

Untuk penghapusan data hampir sama seperti fungsi patch. Dengan menambahkan fungsi delete pada file views.py.

def delete(self, request, item_id):
        item = CartItem.objects.get(id=item_id)
        item.delete()

        data = {
            'message': f'Item {item_id} has been deleted'
        }

        return JsonResponse(data)

Dengan demikian, menghapus data yang sesuai dengan id pada console dapat menggunakan perintah berikut ini

curl -X "DELETE" http://127.0.0.1:8000/update-item/1




Setelah selesai tutorial ini kamu akan mampu membuat RET API sendiri dan menggunakan data dari API pada console. Ini juga bisa dikembangkan kedalam template html. Agar memudahkan pengguna dalam menggunakan api website kita.
Berikut ini merupakan Daftar Isi Pemrograman Python

7 komentar:

  1. Ternyata buat keranjang kayak e-commerce itu sedikit ribet ya. Kirain mah tinggal pasang template aja.

    BalasHapus
  2. namanya juga programmer. kan buat program. bukan hanya masang program.

    BalasHapus
  3. Mas, saya termasuk ingin belajar bahasa program seperti ini.

    BalasHapus
  4. biar masukin datanya ga perlu kaya gini {\"product_quantity\":\"3\"}, coba

    json.dumps(request.body.decode("utf-8")) dulu mas

    BalasHapus
  5. bisa juga kok pake json.dump, inikan contoh penggunaan dari luar program python. jadi saya pake curl.

    BalasHapus
  6. update Post Tentang Python-Django Lagi Bang...

    BalasHapus