Web框架:WSGI简介、RESTful简介

《Python服务端工程师面试宝典-PegasusWang》学习笔记,第七章:WSGI简介、RESTful简介
313阅读 · 2020-6-5 23:57发布

7.1 WSGI与web框架

什么是WSGI?

  • Python Web Server Gateway Interface(pep3333)
  • 描述了Web Server(Gunicorn/uWSGI)如何与web框架(Flask/Django)交互,Web框架如何处理请求。(使web应用部署在任意web server上)
  • WSGI的定义:

    # 导入python内置的WSGI server
      from wsgiref.simple_server import make_server
    
      def application(environ, start_response):
          print(environ)
          status = '200 OK'
          headers = [('Content-Type','text/html; charset=utf8')]
          start_response(status,headers)
          return [b"<h1>Hello, World!</h1>"]
    
      if __name__ == '__main__':
          httpd = make_server('127.0.0.1', 8000, application)
          httpd.serve_forever()
    

常用的Python Web框架对比

  • Django:大而全,内置ORM、Admin等组件,第三方插件较多。
  • Flask:微框架,插件机制,比较灵活。
  • Tornado:异步支持的微框架和异步网络库。

什么是MVC?

  • MVC:模型(Model),视图(View),控制器(Controller)。
  • Model:负责业务对象和数据库的交互(ORM)。
  • View:负责与用户的交互展示。
  • Controller:接收请求参数调用模型和视图完成请求。

什么是ORM?

  • Object Relational Mapping,对象关系映射。
  • 用于实现业务对象与数据表中的字段映射。
  • 优势:代码更加面向对象,代码量更少,灵活性高,提升开发效率。
  • 缺点:自动化进行关系数据库的映射需要消耗系统性能。

7.2 前后端分离与RESTful

什么是前后端分离?有哪些优点?

  • 前后端解耦,接口复用(前端和客户端公用接口),减少开发量。
  • 各司其职,前后端同步开发,提升工作效率。定义好接口规范。
  • 更利于调试(mock)、测试和运维部署。

什么是RESTful?

  • Representational State Transfer(表现层状态转移),由HTTP协议的主要设计者Roy Fielding提出。
  • 资源(Resources),表现层(Representation),状态转化(State Transfer)。
  • 是一种以资源为中心的web软件架构风格,可以用Ajax和RESTful web服务构建应用。

RESTfule三个名词的解释

  • Resources(资源):使用URI指向一个实体。
  • Representation(表现层):资源的表现形式,比如图片、HTML文本等。
  • State Transfer(状态转化):GET、POST、PUT、DELETE HTTP动词来操作资源,实现资源状态的改变。

RESTful的准则

  • 所有事物抽象为资源(resource),资源对应唯一的标识(identifier)。
  • 资源通过接口进行操作实现状态转移,操作本身是无状态的。
  • 对资源的操作不会改变资源的标识。

什么是RESTful API?

  • 通过HTTP GET/POST/PUT/DELETE(获取/新增/更新/删除)资源
  • 一般使用JSON格式返回数据。
  • 一般的web框架都有相应的插件支持RESTful API。

RESTful API设计规范:

HTTP方法 URL 动作
GET http://[hostname]/api/users 检索用户列表
GET http://[hostname]/api/users/[user_id] 检索单个用户
POST http://[hostname]/api/users 创建新用户
PUT http://[hostname]/api/users/[user_id] 更新用户信息
DELETE http://[hostname]/api/users/[user_id] 删除用户