Kode status HTTP dan pengecualian

Dalam banyak situasi, Anda mungkin ingin menggunakan kode status HTTP umum untuk menunjukkan berhasil atau gagalnya permintaan API pengguna. Misalnya, jika pengguna mencoba mengambil entity yang tidak ada, Anda dapat mengirim kode status HTTP 404 untuk menyatakan bahwa tidak ada entity dengan ID entity_id.

Anda dapat mengirim kode status HTTP umum tersebut dengan menaikkan pengecualian yang disediakan oleh library endpoint sebagai berikut:

message = 'No entity with the id "%s" exists.' % entity_id
raise endpoints.NotFoundException(message)

Pengecualian yang diberikan oleh Endpoints Frameworks

Library endpoint menyediakan pengecualian berikut, yang sesuai dengan kode status HTTP tertentu:

Pengecualian Kode status HTTP yang sesuai
endpoints.BadRequestException HTTP 400
endpoints.UnauthorizedException HTTP 401
endpoints.ForbiddenException HTTP 403
endpoints.NotFoundException HTTP 404
endpoints.InternalServerErrorException HTTP 500

Kode status HTTP yang didukung

Framework Cloud Endpoints mendukung subset kode status HTTP dalam respons API. Tabel berikut menjelaskan kode yang didukung.

Kode status HTTP Support
HTTP 2xx HTTP 200 biasanya diasumsikan oleh Endpoints Frameworks jika metode API berhasil ditampilkan.
Jika jenis respons metode API adalah VoidMessage atau nilai yang ditampilkan dari metode API adalah None , HTTP 204 akan ditetapkan.
HTTP 3xx Kode HTTP 3xx tidak didukung. Penggunaan kode 3xx HTTP apa pun akan menghasilkan respons 404 HTTP.
HTTP 4xx Hanya kode HTTP 4xx berikut yang didukung:
  • 400
  • 401
  • 403
  • 404
  • 409
  • 410
  • 412
  • 413
Kode HTTP 4xx lainnya ditampilkan sebagai error 404, kecuali untuk hal berikut:
  • 405 ditampilkan sebagai 501
  • 408 ditampilkan sebagai 503
HTTP 5xx Semua kode status HTTP 5xx dikonversi ke 503 HTTP dalam respons klien.

Membuat class pengecualian Anda sendiri

Jika ingin membuat class pengecualian lain untuk kode status HTTP lainnya, Anda dapat melakukannya dengan membuat subclass endpoints.ServiceException. Cuplikan berikut menunjukkan cara membuat class pengecualian yang merepresentasikan kode status HTTP 409:

import endpoints
import httplib

class ConflictException(endpoints.ServiceException):
  """Conflict exception that is mapped to a 409 response."""
  http_status = httplib.CONFLICT