Error Code and Exception Handling

Rizal Diantoro
Sulang
Published in
3 min readMay 3, 2018

Hari ini saya akan membahas mengenai apa itu Error Code dan Exception Handling, juga bagaimana kami Sulang Dev menanganinya pada Suling apps.

Error Code: Suatu bilangan yang sudah didefinisikan dalam mengakses jaringan melalui layanan HTTP. Bilangan ini memberikan informasi atas apa yang terjadi sewaktu komunikasi dalam HTTP dilakukan.

Status Code

Diatas adalah contoh status code yang biasa digunakan dalam aplikasi yang bersifat REST.

Exception Handling: Suatu cara untuk menangani error yang terjadi pada system sehingga aplikasi tetap dapat berjalan.

Contoh sederhana Exception handling pada python

try:
print 1/0
except ZeroDivisionError:
print "You can't divide by zero, you're silly."

Ketika membagi sebuah angka dengan bilangan 0, akan terjadi error karena hal tersebut tidak diizinkan. Namun jika kita tidak kita handle dengan baik, program yang kita buat akan crash dan tidak berjalan lagi. Itulah alasan kenapa Exception Handling itu penting.

Mari kita buat program sederhana

while True:
x = input('first number: ')
y = input('second number: ')
print (int(x)/int(y))

Program diatas akan crash jika terjadi pembagian dengan 0 dan tidak dapat digunakan. Bayangkan bila ini terjadi pada server yang sudah kita buat.

Lalu kita rubah kode diatas, dan kita handle error yang mungkin terjadi. Menjadi seperti berikut ini:

while True:
x = input('first number: ')
y = input('second number: ')
try:
print (int(x)/int(y))
except ZeroDivisionError:
print ('Jangan dibagi sama 0 dong')

Meskipun dilakukan pembagian dengan 0, tapi program tetap dapat berjalan. Dan error yang terjadi juga disampaikan kepada user.

Bagaimana Sulang Dev Menangani Masalah Diatas?

Kita ambil Case dalam menangani login, karena terdapat banyak kemungkinan error disana.

class LoginUserApiView(APIView):
permission_classes = (permissions.AllowAny, )
def post(self, request):try:
__USERNAME__ = request.data['username']
__PASSWORD__ = request.data['password']
except KeyError:
body = {
'message': 'Silahkan masukan username dan pasword anda!',
}
return Response(data=body, status=status.HTTP_400_BAD_REQUEST)
try:
user = User.objects.get(
username=__USERNAME__, password=__PASSWORD__)
auth_login(request, user)
user_mahasiswa = UserMahasiswa.objects.get(user=user)
serializer = UserMahasiswaSerializer(user_mahasiswa)
token = JWTHelper().get_jwt(user)
payload = {
'data': {
'message': 'Login berhasil!',
'jwt': token,
'user': serializer.data,
}
}
return Response(data=payload, status=status.HTTP_200_OK)
except User.DoesNotExist:
body = {
'message': 'Username atau password anda salah!',
}
return Response(
data=body,
status=HTTP_432_WRONG_PASSWORD_OR_USERNAME
)

Kemungkinan yang pertama adalah, user tidak memasukkan username dan password dengan baik. Sehingga ketika kita ingin mendapatkan data yang ada pada request.data akan terjadi error. Error ini seperti kita ingin mendapatkan suatu nilai dari dict di python namun key yang dicari tidak ada. Dan hal ini dapat menimbulkan crash pada system. Lalu kami menggunakan exception handling untuk dapat mengatasinya.

try:
__USERNAME__ = request.data['username']
__PASSWORD__ = request.data['password']
except KeyError:
body = {
'message': 'Silahkan masukan username dan pasword anda!',
}
return Response(data=body, status=status.HTTP_400_BAD_REQUEST)

Kami coba untuk mendapatkan data dengan key username dan password. Jika terjadi exception KeyError kami akan mengembalikan request ke user dengan status code 400 atau bad request. Ini terjadi karena system butuh beberapa data yang tidak disediakan oleh user.

Setelah mengecek apakah data yang dibutuhkan oleh system tersedia, maka system akan mengecek apa user yang login memasukkan username dan password dengan benar atau tidak. Jika user yang dicari tidak ada, program akan memberikan exception User.DoesNotExist yang harus ditangani oleh Sulang Dev.

try:
user = User.objects.get(
username=__USERNAME__, password=__PASSWORD__)
auth_login(request, user)
user_mahasiswa = UserMahasiswa.objects.get(user=user)
serializer = UserMahasiswaSerializer(user_mahasiswa)
token = JWTHelper().get_jwt(user)
payload = {
'data': {
'message': 'Login berhasil!',
'jwt': token,
'user': serializer.data,
}
}
return Response(data=payload, status=status.HTTP_200_OK)
except User.DoesNotExist:
body = {
'message': 'Username atau password anda salah!',
}
return Response(
data=body,
status=HTTP_432_WRONG_PASSWORD_OR_USERNAME
)

Ini adalah bagaimana kami mengatasi permasalahan untuk user yang login dengan password atau username salah. Kami akan mengembalikan status 432.

LOH! Kok 432? Itu status code apa?

Ini adalah salah satu status code yang sudah didefinisikan oleh tim sulang untuk request login dengan username atau password yang salah.

status_code.py

HTTP_432_WRONG_PASSWORD_OR_USERNAME = 432

Sampai sejauh ini, belum ada pendefinisian dari RFC untuk request login yang salah username atau password. Untuk itu kami mendifinisikannya sendiri, sehingga komunikasi HTTP antara backend dan frontend ataupun dengan user akan semakin harmonis karena adanya message yang lebih jelas.

--

--