Membuat API menggunakan Fungsi View

Terdapat beberapa pendekatan membuat API, yaitu dengan membuat fungsi pada view.py, membuat fungsi dengan menggunakan dekorator API dan membuat API Class.

Pada modul ini kita akan membahas membuat fungsi view dari Django (bukan Django REST framework) untuk membuat API.

Buka file backend/views.py, tambahkan kode berikut:

from django.shortcuts import render
from .models import Article
from .serializers import ArticleSerializer
from rest_framework.parsers import JSONParser
from django.http import JsonResponse, HttpResponse
from django.views.decorators.csrf import csrf_exempt

@csrf_exempt
def article_list(request):
    if request.method == "GET":
        articles = Article.objects.all()
        serializer = ArticleSerializer(articles, many=True)
        
        return JsonResponse(serializer.data, safe=False)
    elif request.method == "POST":
        data = JSONParser().parse(request)
        serializer = ArticleSerializer(data=data)
        if serializer.is_valid():
            serializer.save()
            return JsonResponse(serializer.data, status=201)
        return JsonResponse(serializer.error, status=400)
    
@csrf_exempt
def article_detail(request, slug):
    try:
        article = Article.objects.get(slug=slug)
    except Article.DoesNotExist:
        return HttpResponse(status=404)
    
    if request.method == "GET":
        serializer = ArticleSerializer(article)
        return JsonResponse(serializer.data)
    elif request.method == "PUT":
        data = JSONParser().parse(request)
        serializer = ArticleSerializer(article, data=data)
        if serializer.is_valid():
            serializer.save()
            return JsonResponse(serializer.data)
        return JsonResponse(serializer.errors, status=400)
    elif request.method == "DELETE":
        article.delete()
        return HttpResponse(status=204)

Kemudian file baru backend/urls.py

from django.urls import path
from .views import article_list, article_detail

urlpatterns = [
    path('articles/', article_list),
    path('articles/<slug:slug>', article_detail)
]

Kemudian buka file djangoAPI/urls.py (perhatikan, file urls.py dari project, bukan app).

from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('backend.urls'))
]

Jika kita jalankan server, dengan perintah python manage.py runserver, lalu buka browser pada alamat 127.0.0.1:8000/articles, akan ditampilkan data JSON.

Untuk melakukan testing posting data, Anda dapat gunakan curl atau aplikasi postman agar lebih mudah.

Namun sebelumnya, kita perlu melakukan sedikit modifikasi pada backend/serializers.py untuk field slug.

from rest_framework import serializers
from .models import Article

class ArticleSerializer(serializers.ModelSerializer):
    slug = serializers.SlugField(read_only=True)
    class Meta:
        model = Article
        fields = '__all__'

Berikut contoh perintah menggunakan curl untuk Windows Powershell. (untuk kemudahan, disarankan menggunakan aplikasi Postman).

$ curl -Method POST -Uri "127.0.0.1:8000/articles/" -ContentType 'application/json' -Body '{"title": "Fourth Article", "description": "Lorem ipsum curl test"}'

Jika Anda buka halaman admin, dapat dilihat, data berhasil ditambahkan.

Anda juga dapat mencoba menampilkan article berdasarkan slug, contohnya dengan menggunakan url 127.0.0.1:8000/articles/first-article/

Sharing is caring: