秋招网络-REST-RPC-开发/测试/运维
这是不同方向的共同点,开发考察对RPC的熟悉程度。测试考查基本网络知识和接口的理解。运维考查网络和原理和相关部署调优,排故障。
这是之前写的文章的一部分。
更新-网络篇-后端/测试/运维-秋招八股文提高篇
3.1.1 restful的用法是怎样的,说下get 和post的区别和常见场景。
RESTFUL 是一种API的表现风格,REST中文是表征状态转移,就是将增删改查动作转换为GET,POST,PUT,DELETE请求,同时将需要操作的对象转换到一个URL上。
区别和场景参见 网络篇,这里不做赘述。
3.1.2 现在restful你感觉有什么优缺点,有些公司只使用post,不使用常规的rest模式,只使用http协议作为api调用方式,这是为什么?
rest模式使得用户调用API,了解API上更加方便,易于通过swagger等文档生成工具自动生成文档,通过约定的方式降低用户的使用成本。
但是约定接口的方式会带来可猜测和攻击面范围的扩大,使得安全机制较差。同时在复杂环境下,HTTP的动词较少,不太适合映射。此外,在一些需要会话保持的情况下,HTTP不太适合,然而大多数的REST都是用的HTTP。
一般公司内部的环境或者部分对外API会只使用post,将操作动词写入json中,后端解析相关json,这样可以规避黑客探测,同时post在整个过程中不会有太多的痕迹,因为记录requestBody的功能比较少。例如日志一般不记录。同时post没有长度限制,可以传递一些图片而无需使用文件服务器。等等。
3.1.3 听说过graphQL吗?有相关的尝试吗?
这个一般只有在简历中写到量使用或者了解才会问,因为目前graphQL只在部分环境下使用。
一种是前端需要更多的数据库权限,而且开发速度有要求,这样直接把操作数据库的权限放到前端。
前端需要更多时间调整代码,并注意查询和操作数据库的可用性。
3.1.4 了解RPC协议吗,说说看,为什么不直接使用HTTPS协议呢?用WebSocket不行吗?
RPC 远程方法调用,在各个后端组件的相互调用中常见。常见的有java的 dubbo,多语言的gRPC,Facebook的thrift。
RPC有着xxxx的特点,在内部场景和SDK书写中常用。(这个在后端开发中问的很多,视情况单开一章)
其实gRPC底层用的就是HTTPS协议,说明RPC也是可以使用HTTPS的,但是通过一些改进可以更好适配RPC需求。最大的改进是Protobuf,序列化和反序列化极大地增强了其性能。部分RPC的特性如压缩,认证都部分使用HTTP/2的协议内容。
可以使用websocket,对应的协议栈是HTTP,在常见的消息交换时比较适合,但是RPC有其他的功能更加适配服务之间的信息交换。