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