CherryPy - Web Hizmetleri
Bir web hizmeti, uygulama veya sistemler arasında veri alışverişinde yardımcı olan ve açık protokoller ve standartlar da içeren bir dizi web tabanlı bileşendir. Web üzerinde yayınlanabilir, kullanılabilir ve bulunabilir.
Web hizmetleri, RWS (RESTfUL Web Hizmeti), WSDL, SABUN ve daha pek çoğu gibi çeşitli türlerdedir.
REST - Temsili Devlet Transferi
Uzak prosedürleri çağırmak yerine durumu işlemek için kullanılabilen, durumu istemciden sunucuya aktaran bir tür uzaktan erişim protokolü.
Herhangi bir spesifik kodlamayı veya yapıyı ve yararlı hata mesajlarını döndürmenin yollarını tanımlamaz.
Durum aktarım işlemlerini gerçekleştirmek için HTTP "fiillerini" kullanır.
Kaynaklar, URL kullanılarak benzersiz şekilde tanımlanır.
Bir API değil, bunun yerine bir API taşıma katmanıdır.
REST, bir ağdaki kaynakların isimlendirmesini korur ve bu kaynaklar üzerinde işlemler gerçekleştirmek için birleşik bir mekanizma sağlar. Her kaynak, en az bir tanımlayıcı ile tanımlanır. REST altyapısı HTTP temel alınarak uygulanırsa, bu tanımlayıcılar şu şekilde adlandırılır:Uniform Resource Identifiers (URIs).
Aşağıdakiler, URI kümesinin iki ortak alt kümesidir -
Alt küme | Tam form | Misal |
---|---|---|
URL | Tekdüzen Kaynak Bulucu | http://www.gmail.com/ |
URN | Tekdüzen Kaynak Adı | urn: isbn: 0-201-71088-9 urn: uuid: 13e8cf26-2a25-11db-8693-000ae4ea7d46 |
CherryPy mimarisinin uygulanmasını anlamadan önce CherryPy'nin mimarisine odaklanalım.
CherryPy aşağıdaki üç bileşeni içerir -
cherrypy.engine - Süreç başlatma / sökme ve olay işlemeyi kontrol eder.
cherrypy.server - WSGI veya HTTP sunucusunu yapılandırır ve kontrol eder.
cherrypy.tools - Bir HTTP isteğini işlemek için ortogonal olan bir araç kutusu.
CherryPy aracılığıyla REST Arayüzü
RESTful web hizmeti, aşağıdakilerin yardımıyla CherryPy mimarisinin her bir bölümünü uygular -
- Authentication
- Authorization
- Structure
- Encapsulation
- Hata yönetimi
Doğrulama
Kimlik doğrulama, etkileşimde bulunduğumuz kullanıcıları doğrulamaya yardımcı olur. CherryPy, her kimlik doğrulama yöntemini işlemek için araçlar içerir.
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)
Yukarıdaki Authenticate () işlevi, istemcilerin veya kullanıcıların varlığını doğrulamaya yardımcı olacaktır. Yerleşik araçlar, süreci sistematik bir şekilde tamamlamaya yardımcı olur.
yetki
Yetkilendirme, URI aracılığıyla sürecin akıl sağlığını korumaya yardımcı olur. Süreç ayrıca, kullanıcı anahtarları tarafından nesnelerin dönüştürülmesine yardımcı olur.
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
})
Yerleşik yetkilendirme araçları, önceki örnekte belirtildiği gibi, rutinlerin sistematik bir şekilde ele alınmasına yardımcı olur.
Yapısı
Bir API yapısının korunması, uygulamanın URI'sini eşlemenin iş yükünü azaltmaya yardımcı olur. API'yi keşfedilebilir ve temiz tutmak her zaman gereklidir. CherryPy çerçevesi için API'nin temel yapısı aşağıdakilere sahip olmalıdır -
- Hesaplar ve Kullanıcı
- Autoresponder
- Contact
- File
- Folder
- Liste ve alan
- Mesaj ve Toplu İş
Kapsülleme
Kapsülleme, hafif, insan tarafından okunabilen ve çeşitli istemciler tarafından erişilebilen API oluşturmaya yardımcı olur. Oluşturma, Alma, Güncelleme ve Silme ile birlikte öğe listesi, API kapsüllenmesini gerektirir.
Hata yönetimi
Bu süreç, eğer varsa, API belirli bir içgüdüyle çalışmazsa hataları yönetir. Örneğin, 400 Kötü İstek ve 403 yetkisiz istek içindir.
Misal
Aşağıdakileri veritabanı, doğrulama veya uygulama hataları için bir örnek olarak düşünün.
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())
Yukarıdaki kod aşağıdaki çıktıyı üretecektir -
API (Uygulama Programlama Arayüzü) yönetimi, yerleşik erişim araçları sayesinde CherryPy aracılığıyla kolaydır.
HTTP Yöntemleri
Kaynaklar üzerinde çalışan HTTP yöntemlerinin listesi aşağıdaki gibidir -
S.No | HTTP Yöntemi ve Çalışması |
---|---|
1. | HEAD Kaynak meta verilerini alır. |
2. | GET Kaynak meta verilerini ve içeriğini alır. |
3. | POST Sunucudan, istek gövdesinde bulunan verileri kullanarak yeni bir kaynak oluşturmasını ister. |
4. | PUT Sunucunun, mevcut bir kaynağı istek gövdesinde bulunan kaynakla değiştirmesini ister. |
5. | DELETE Sunucudan, bu URI tarafından tanımlanan kaynağı kaldırmasını ister. |
6. | OPTIONS Sunucudan, genel olarak veya özellikle bir kaynağa yönelik yeteneklerle ilgili ayrıntıları döndürmesini ister. |
Atom Yayınlama Protokolü (APP)
APP, web kaynaklarının yayınlanmasına ve düzenlenmesine izin vermek için Atom topluluğundan HTTP'nin üzerinde bir uygulama düzeyinde protokol olarak ortaya çıktı. Bir APP sunucusu ile bir istemci arasındaki mesaj birimi, Atom XML-belge biçimine dayanır.
Atom Yayınlama Protokolü, HTTP ve mekanizmalarını ve mesaj birimi olarak Atom XML-belge biçimini kullanan bir APP hizmeti ile bir kullanıcı aracısı arasında bir dizi işlemi tanımlar.
APP ilk olarak, kullanıcı aracısına APP hizmeti tarafından sunulan farklı koleksiyonların URI'sini sağlayan bir hizmet belgesini tanımlar.
Misal
APP'nin nasıl çalıştığını göstermek için bir örnek verelim -
<?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, aşağıdaki tabloda açıklandığı gibi HTTP yöntemlerini kullanarak bir koleksiyonun üyesine veya koleksiyonun kendisine karşı temel CRUD işlemlerinin nasıl gerçekleştirileceğini belirtir -
Operasyon | HTTP Yöntemi | Durum kodu | İçerik |
---|---|---|---|
Al | ALMAK | 200 | Kaynağı temsil eden bir Atom girişi |
Oluşturmak | İLETİ | 201 | Konum ve İçerik-Konum üstbilgileri aracılığıyla yeni oluşturulan kaynağın URI'si |
Güncelleme | KOYMAK | 200 | Kaynağı temsil eden bir Atom girişi |
Sil | SİL | 200 | Yok |