9-3 前后端分离与 RESTful 常见面试题

Posted WinvenChang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了9-3 前后端分离与 RESTful 常见面试题相关的知识,希望对你有一定的参考价值。

一、考点聚焦

什么是前后端分离?什么是RESTful
1.前后端分离的意义和方式
2.什么是RESTful
3.如何设计RESTful

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

后端只负责提供数据接口,不再渲染模板,前端获取数据并呈现
1.前后端解耦,接口复用(前端和客户端公用接口),减少开发量
2.各司其职,前后端同步开发,提升工作效率。定义好接口规范。
3.更有利于调度(mock)、测试和运维部署
4.缺点是对于单页面不好做seo

三、什么是RESTful

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

RESTful解释
1.Resources(资源):使用URI指向一个实体
2.Representation(表现层):资源的表现形式,比如图片、html文本等
3.State Transer(状态转化):GET、POST、PUT、DELETE HTTP动词来操作资源,实现资源状态的改变

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

什么是RESTful API
RESTful风格的API接口:
1.通过HTTP GET/POST/PUT/DELETE 获取/新建/更新/删除 资源
2.一般使用JSON格式返回数据
3.一般web框架都有相应的插件支持RESTful API

四、如何设计RESTful API

HTTP方法URL动作
GEThttp://[hostname]/api/users检索用户列表
GEThttp://[hostname]/api/users/[user_id]检索单个用户
POSThttp://[hostname]/api/users创建新用户
PUThttp://[hostname]/api/users/[user_id]更新用户信息
DELETEhttp://[hostname]/api/users/[user_id]删除用户

Tornado框架的RESTful API示例:

imoprt tornado.web
from tornado.escape import json_encode
from models.user import UserModel

class UserListHandler(tornado.web.RequestHandler):
	def get(self):   # 批量获取用户
		users = UserModel.get_all()
		self.write(json_encode(users))

	def post(self):
		name = self.get_argument('name')
		age = self.get_argument('age')
		UserModel.create(name, age)
		resp = {'status': True, 'msg': 'create success'}
		self.write(json_encode(resp))

class UserHandler(tornado.web.RequestHandler):
	def get(self, user_id):
		try:
			user = UserModel.get(int(user_id))
		except KeyError:
			return self.set_status(404)
		self.write(json_encode(user))

	 def put(self, user_id):
	 	age = self.get_argument('age')
	 	UserModel.update(int(user_id), age)
	 	resp = {'status': True, 'msg': 'update success'}
	 	self.write(json_encode(resp))

	 def delete(self, user_id):
	 	UserModel.delete(int(user_id))
	 	resp = {'status': True, 'msg': 'delete success'}
	 	self.write(json_encode(resp))			

以上是关于9-3 前后端分离与 RESTful 常见面试题的主要内容,如果未能解决你的问题,请参考以下文章

9-3 前后端分离与 RESTful 常见面试题

前后端分离与 restful api

移动端APP测试常见面试题精析1

仿牛客网讨论社区项目—项目总结及项目常见面试题

面试题JVM常见面试题

SpringMVC常见面试题总结