CherryPy REST接口通過CherryPy

2023-12-31 21:57 更新

RESTful Web服務(wù)在以下幫助下實(shí)現(xiàn)CherryPy架構(gòu)的每個(gè)部分 -

  • Authentication
  • Authorization
  • Structure
  • Encapsulation
  • 錯(cuò)誤處理

身份驗(yàn)證 (Authentication)

身份驗(yàn)證有助于驗(yàn)證與我們交互的用戶。 CherryPy包含處理每種身份驗(yàn)證方法的工具。

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)

上述函數(shù)authenticate()將有助于驗(yàn)證客戶端或用戶的存在。 內(nèi)置工具有助于系統(tǒng)地完成該過程。

授權(quán) (Authorization)

授權(quán)有助于通過URI維護(hù)流程的健全性。 該過程還有助于通過用戶令牌引線變形對象。

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
})

內(nèi)置的授權(quán)工具有助于系統(tǒng)地處理例程,如前面的示例所述。

結(jié)構(gòu) Structure

維護(hù)API結(jié)構(gòu)有助于減少映射應(yīng)用程序URI的工作量。 始終需要保持API可被發(fā)現(xiàn)和清潔。 CherryPy框架的API的基本結(jié)構(gòu)應(yīng)該如下 -

  • 帳戶和用戶
  • Autoresponder
  • Contact
  • File
  • Folder
  • 列表和字段
  • Message and Batch

封裝 (Encapsulation)

封裝有助于創(chuàng)建輕量級,人類可讀且可供各種客戶端訪問的API。 項(xiàng)目列表以及創(chuàng)建,檢索,更新和刪除需要封裝API。

錯(cuò)誤處理

如果API無法以特定的本能執(zhí)行,此過程將管理錯(cuò)誤(如果有)。 例如,400表示錯(cuò)誤請求,403表示未授權(quán)請求。

例子 (Example)

請考慮以下內(nèi)容作為數(shù)據(jù)庫,驗(yàn)證或應(yīng)用程序錯(cuò)誤的示例。

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())

上面的代碼將產(chǎn)生以下輸出 -

錯(cuò)誤處理

由于內(nèi)置的??訪問工具,通過CherryPy可以輕松管理API(應(yīng)用程序編程接口)。


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號