CherryPy - Layanan Web
Layanan web adalah sekumpulan komponen berbasis web yang membantu dalam pertukaran data antara aplikasi atau sistem yang juga mencakup protokol dan standar terbuka. Itu dapat diterbitkan, digunakan dan ditemukan di web.
Layanan web memiliki berbagai jenis seperti RWS (RESTfUL Web Service), WSDL, SOAP, dan banyak lagi.
REST - Transfer Negara Perwakilan
Jenis protokol akses jarak jauh, yang mentransfer status dari klien ke server yang dapat digunakan untuk memanipulasi status alih-alih memanggil prosedur jarak jauh.
Tidak menentukan pengkodean atau struktur tertentu dan cara mengembalikan pesan kesalahan yang berguna.
Menggunakan "verba" HTTP untuk melakukan operasi transfer status.
Sumber daya diidentifikasi secara unik menggunakan URL.
Ini bukan API melainkan lapisan transport API.
REST mempertahankan nomenklatur sumber daya di jaringan dan menyediakan mekanisme terpadu untuk melakukan operasi pada sumber daya ini. Setiap sumber daya diidentifikasi oleh setidaknya satu pengenal. Jika infrastruktur REST diimplementasikan dengan basis HTTP, maka pengidentifikasi ini disebut sebagaiUniform Resource Identifiers (URIs).
Berikut ini adalah dua subset umum dari set URI -
Subset | Wujud sempurna | Contoh |
---|---|---|
URL | Uniform Resource Locator | http://www.gmail.com/ |
PASU | Uniform Resource Name | urn: isbn: 0-201-71088-9 urn: uuid: 13e8cf26-2a25-11db-8693-000ae4ea7d46 |
Sebelum memahami implementasi arsitektur CherryPy, mari kita fokus pada arsitektur CherryPy.
CherryPy mencakup tiga komponen berikut -
cherrypy.engine - Ini mengontrol proses startup / teardown dan penanganan acara.
cherrypy.server - Ini mengkonfigurasi dan mengontrol server WSGI atau HTTP.
cherrypy.tools - Kotak alat utilitas yang ortogonal untuk memproses permintaan HTTP.
Antarmuka REST melalui CherryPy
Layanan web yang tenang mengimplementasikan setiap bagian arsitektur CherryPy dengan bantuan berikut ini -
- Authentication
- Authorization
- Structure
- Encapsulation
- Penanganan Error
Autentikasi
Otentikasi membantu dalam memvalidasi pengguna yang berinteraksi dengan kami. CherryPy menyertakan alat untuk menangani setiap metode otentikasi.
def authenticate():
if not hasattr(cherrypy.request, 'user') or cherrypy.request.user is None:
# < Do stuff to look up your users >
cherrypy.request.authorized = False # This only authenticates.
Authz must be handled separately.
cherrypy.request.unauthorized_reasons = []
cherrypy.request.authorization_queries = []
cherrypy.tools.authenticate = \
cherrypy.Tool('before_handler', authenticate, priority=10)
Fungsi otentikasi () di atas akan membantu untuk memvalidasi keberadaan klien atau pengguna. Alat bawaan membantu menyelesaikan proses dengan cara yang sistematis.
Otorisasi
Otorisasi membantu menjaga kewarasan proses melalui URI. Proses ini juga membantu mengubah objek dengan petunjuk token pengguna.
def authorize_all():
cherrypy.request.authorized = 'authorize_all'
cherrypy.tools.authorize_all = cherrypy.Tool('before_handler', authorize_all, priority=11)
def is_authorized():
if not cherrypy.request.authorized:
raise cherrypy.HTTPError("403 Forbidden",
','.join(cherrypy.request.unauthorized_reasons))
cherrypy.tools.is_authorized = cherrypy.Tool('before_handler', is_authorized,
priority = 49)
cherrypy.config.update({
'tools.is_authorized.on': True,
'tools.authorize_all.on': True
})
Alat bantu otorisasi bawaan membantu menangani rutinitas dengan cara yang sistematis, seperti yang disebutkan dalam contoh sebelumnya.
Struktur
Mempertahankan struktur API membantu mengurangi beban kerja pemetaan URI aplikasi. Selalu penting untuk menjaga agar API dapat ditemukan dan bersih. Struktur dasar API untuk kerangka CherryPy harus memiliki yang berikut -
- Akun dan Pengguna
- Autoresponder
- Contact
- File
- Folder
- Daftar dan bidang
- Pesan dan Batch
Enkapsulasi
Enkapsulasi membantu dalam membuat API yang ringan, dapat dibaca manusia dan dapat diakses oleh berbagai klien. Daftar item bersama dengan Creation, Retrieval, Update dan Deletion membutuhkan enkapsulasi API.
Penanganan Error
Proses ini mengelola kesalahan, jika ada, jika API gagal dijalankan pada naluri tertentu. Misalnya, 400 untuk Permintaan Buruk dan 403 untuk permintaan yang tidak sah.
Contoh
Pertimbangkan hal berikut sebagai contoh untuk database, validasi, atau kesalahan aplikasi.
import cherrypy
import json
def error_page_default(status, message, traceback, version):
ret = {
'status': status,
'version': version,
'message': [message],
'traceback': traceback
}
return json.dumps(ret)
class Root:
_cp_config = {'error_page.default': error_page_default}
@cherrypy.expose
def index(self):
raise cherrypy.HTTPError(500, "Internal Sever Error")
cherrypy.quickstart(Root())
Kode di atas akan menghasilkan keluaran sebagai berikut -
Manajemen API (Application Programming Interface) mudah dilakukan melalui CherryPy karena alat akses bawaan.
Metode HTTP
Daftar metode HTTP yang beroperasi pada sumber daya adalah sebagai berikut -
S.No | Metode & Operasi HTTP |
---|---|
1. | HEAD Mengambil metadata sumber daya. |
2. | GET Mengambil metadata sumber daya dan konten. |
3. | POST Meminta server untuk membuat sumber daya baru menggunakan data yang disertakan dalam isi permintaan. |
4. | PUT Meminta server untuk mengganti sumber daya yang ada dengan yang disertakan dalam badan permintaan. |
5. | DELETE Meminta server untuk menghapus sumber daya yang diidentifikasi oleh URI tersebut. |
6. | OPTIONS Meminta server untuk mengembalikan detail tentang kapabilitas baik secara global atau khusus terhadap suatu sumber daya. |
Atom Publishing Protocol (APP)
APP telah muncul dari komunitas Atom sebagai protokol tingkat aplikasi di atas HTTP untuk memungkinkan penerbitan dan pengeditan sumber daya web. Unit pesan antara server APP dan klien didasarkan pada format dokumen XML Atom.
Protokol Penerbitan Atom mendefinisikan serangkaian operasi antara layanan APP dan agen pengguna menggunakan HTTP dan mekanismenya serta format dokumen XML Atom sebagai unit pesan.
APP pertama-tama mendefinisikan dokumen layanan, yang memberi agen pengguna URI dari koleksi berbeda yang disajikan oleh layanan APP.
Contoh
Mari kita ambil contoh untuk mendemonstrasikan cara kerja APP -
<?xml version = "1.0" encoding = "UTF-8"?>
<service xmlns = "http://purl.org/atom/app#" xmlns:atom = "http://www.w3.org/2005/Atom">
<workspace>
<collection href = "http://host/service/atompub/album/">
<atom:title> Albums</atom:title>
<categories fixed = "yes">
<atom:category term = "friends" />
</categories>
</collection>
<collection href = "http://host/service/atompub/film/">
<atom:title>Films</atom:title>
<accept>image/png,image/jpeg</accept>
</collection>
</workspace>
</service>
APP menentukan cara melakukan operasi CRUD dasar terhadap anggota koleksi atau koleksi itu sendiri dengan menggunakan metode HTTP seperti yang dijelaskan dalam tabel berikut -
Operasi | Metode HTTP | Kode status | Kandungan |
---|---|---|---|
Ambil | DAPATKAN | 200 | Entri Atom yang mewakili sumber daya |
Membuat | POS | 201 | URI sumber daya yang baru dibuat melalui header Location dan Content-Location |
Memperbarui | TARUH | 200 | Entri Atom yang mewakili sumber daya |
Menghapus | MENGHAPUS | 200 | Tidak ada |