RESTful API 设计介绍 - 曾铭
WHAT
- API 概念
- 其它方案 SOAP 等
- HTTP 无状态
- RESTful 概念 REpresentational State Transfer 表征性状态传输
- 复用 HTTP 本身的协议定义
- 带来的好处:通用,动词,code,缓存,安全
例子
1 | BAD |
- 对单一实体的重复
- 多个实体对操作的重复
- 实体之间逻辑接口的重复定义
1 | GOOD |
- 好的 API 定义清晰,可预期。
总结
- 重复的实现或设计,嗅嗅不好的味道
- 重复制造轮子,而不是重复发明轮子 (如用户授权,加密,缓存等)
- RESTful 不仅仅适用于 APP,重点是 C/S
- 各端实现:参考覃超的知乎回答
IP网段划分 - 王胜
三大类IP段
A类地址
- 第1字节为网络地址,其他3个字节为主机地址。另外,第1个字节的最高位固定为0。
- 地址范围:1.0.0.0到126.255.255.255。
- 默认子网掩码:255.0.0.0,一个子网最多可以容纳1677万多台电脑。
- 保留地址:127.0.0.0到127.255.255.255是保留地址,用做循环测试用。
- 私有地址:10.0.0.0到10.255.255.255。【0000 1010】
B类地址
- 第1字节和第2字节为网络地址,其他2个字节为主机地址。另外1个字节的前2位固定为10。
- 地址范围:128.0.0.0到191.255.255.255。
- 默认子网掩码:255.255.0.0 一个子网最多可以容纳6万台电脑。
- 保留地址:169.254.0.0到169.254.255.255是保留地址。如果你的IP地址是自动获取IP地址,而你在网络上又没有找到可用的DHCP服务器,这时你将会从169.254.0.1到169.254.255.254中临时获得一个IP地址。
- 私有地址:在B类地址中,172.16.0.0到172.31.255.255是私有地址。
C类地址
- 第1字节、第2字节和第3个字节为网络地址,第4个字节为主机地址。另外第1个字节的前三位固定为110。
- 地址范围:192.0.0.0到223.255.255.255。
- 默认子网掩码 255.255.255.0 一个子网最多可以容纳254台电脑。
- 私有地址:192.168.0.0到192.168.255.255是私有地址。
两个特殊地址
- 0.0.0.0 全网地址,三界之外的收容器
- 255.255.255.255 广播地址
OSI七层模型详解 - 吴明
- 物理层:
- 相关协议:IEEE802.2,Ethernet v.2,Internetwork
- 数据链路层
- 相关协议:MPLS,XTP,DCAP
- 网络层
- 传输层
- 相关协议:EGP,NHRP
- 会话层:
- 表示层:
- 应用层:
网络分层协议模型 - 张超耀
网络分层协议模型
根据 TCP/IP协议簇的协议来命名
- 应用层 数据 泛指应用层使用的
- 传输层 数据段 传输层
- 网络层 数据包 网络层
- 链路层 帧 网络接入层
- 物理层 比特(位) 通过介质实际传输数据时使用的
OSI七成协议模型
- 应用层:例如HTTP、SMTP、SNMP、FTP、Telnet、SIP、SSH、NFS、RTSP、XMPP、Whois、ENRP
- 表示层:例如XDR、ASN.1、SMB、AFP、NCP
- 会话层:例如ASAP、TLS、SSH、ISO 8327 / CCITT X.225、RPC、NetBIOS、ASP、Winsock、BSD sockets
- 传输层:例如TCP、UDP、RTP、SCTP、SPX、ATP、IL
- 网络层:例如IP、ICMP、IGMP、IPX、BGP、OSPF、RIP、IGRP、EIGRP、ARP、RARP、X.25
- 数据链路层:例如以太网、令牌环、HDLC、帧中继、ISDN、ATM、IEEE 802.11、FDDI、PPP
- 物理层:例如线路、无线电、光纤
分层的好处:
- 各层之间是独立的
- 灵活性好
- 结构上可分割开
- 易于实现和维护
- 能促进标准化工作
协议模型:
包装数据包的过程
- TCP传给IP的数据单元称作TCP报文段或简称为TCP段(TCP segment),传给网络接口层的数据单元称作IP数据报(IPdatagram).通过以太网传输的比特流称作帧(Frame)
分用即解包的过程
不同层直接协议关系
TCP/IP三次握手与四次挥手 - 李仙鹏
引用自图解 TCP/IP 协议&version=11020012&pass_ticket=Mh3kdFcxrCoIa0yIg1d7eLqJGuQkBQLzt2YIYx5poC%2BLzaWWMRZ5D1Vl6Pobd8ui)
计算机网络安全 - 杨志平
2015网络安全事件
- 携程网内部员工误删除代码 网站整体宕机12小时
- 支付宝机房电缆被挖断 部分区域服务中断
- 网易骨干网遭攻击 百万用户无法打游戏
- 海康威视被黑客植入代码 导致被远程监控
敏感数据(账号、密码等)
- 账号密码(post明文显示)
- 重要资源数据(防爬虫)
- 多重账号威胁(网络账号通用)
- 通讯协议破解(iMessage)
网络传输加密
数据加密算法
- 对称式加密技术 (加密-解密)
- DES(Data Encryption Standard)
数据加密标准,速度较快,适用于加密大量数据的场合。
- 3DES(Triple DES)
是基于DES,对一块数据用三个不同的密钥进行三次加密,强度更高。
- AES(Advanced Encryption Standard)
高级加密标准,是下一代的加密算法标准,速度快,安全级别高;
- DES(Data Encryption Standard)
- 对称式加密技术 (加密-解密)
- 非对称式加密技术(公钥-私钥)
- RSA
>是一个支持变长密钥的公共密钥算法,需要加密的文件块的长度也是可变的;
- DSA(Digital Signature Algorithm)
>数字签名算法,是一种标准的 DSS(数字签名标准);
- ECC(Elliptic Curves Cryptography)
>椭圆曲线密码编码学。
- 散列算法 (不可逆)
- MD5(Message Digest Algorithm 5)
>是RSA数据安全公司开发的一种单向散列算法,非可逆,相同的明文产生相同的密文。
- SHA(Secure Hash Algorithm)
>可以对任意长度的数据运算生成一个160位的数值;
简单加密演示
- 简单位移式加密(经典:凯撒加密)
1 | “恺撒密码”据传是古罗马恺撒大帝用来保护重要军情的加密系统。它是一种替代密码,通过将字母按顺序推后起3位起到加密作用, |
- 置换加密
1 | 令明文m=m1,m2,...mL。令置换矩阵所决定的置换为pi,则加密置换c=Ek(m)=(c1,c2,...cL)=mpi(1),mpi(2),...,mpi(L) |
Alamofire文档阅读 - 潘君
AFNetworking的继承者
Feature
- Chainable Request / Response methods
链式 request / response
Complete Documentation
1 | // Response handlers can even be chained: |
URL / JSON / plist Parameter Encoding
除了以上几种 还可以自定义
Alamofire provides built-in response serialization for strings, JSON, and property lists, but others can be added in extensions on Alamofire.Request.- Upload File / Data / Stream / MultipartFormData
多种文件上传方式
- Upload File / Data / Stream / MultipartFormData
Download using Request or Resume data
Authentication with NSURLCredential
HTTP Response Validation
Progress Closure & NSProgress
- cURL Debug Output
- Comprehensive Unit Test Coverage
某些点
- url编码
GET1
2
3GET Request With URL-Encoded Parameters
Alamofire.request(.GET, "http://httpbin.org/get", parameters: ["foo": "bar"])
// http://httpbin.org/get?foo=bar
POST1
2
3
4
5
6
7
8
9
10
11
12let parameters = [
"foo": "bar",
"baz": ["a", 1],
"qux": [
"x": 1,
"y": 2,
"z": 3
]
]
Alamofire.request(.POST, "http://httpbin.org/post", parameters: parameters)
// HTTP body: foo=bar&baz[]=a&baz[]=1&qux[x]=1&qux[y]=2&qux[z]=3
转object
Generic Response Object Serialization校验
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17Manual Validation
Alamofire.request(.GET, "http://httpbin.org/get", parameters: ["foo": "bar"])
.validate(statusCode: 200..<300)
.validate(contentType: ["application/json"])
.response { _, _, _, error in
println(error)
}
Automatic Validation
Automatically validates status code within 200...299 range, and that the Content-Type header of the response matches the Accept header of the request, if one is provided.
Alamofire.request(.GET, "http://httpbin.org/get", parameters: ["foo": "bar"])
.validate()
.response { _, _, _, error in
println(error)
}方便打印
Printable
1 | let request = Alamofire.request(.GET, "http://httpbin.org/ip") |
DebugPrintable
1 | let request = Alamofire.request(.GET, "http://httpbin.org/get", parameters: ["foo": "bar"]) |
- 支持暂停/恢复/取消
- suspend(): Suspends the underlying task and dispatch queue
- resume(): Resumes the underlying task and dispatch queue. If the owning manager does not have startRequestsImmediately set to true, the request must call resume() in order to start.
- cancel(): Cancels the underlying task, producing an error that is passed to any registered response handlers.
- 自定义response serializer