C# WebAPI学习总结

目录

RESTful是什么

WebService/WCF/WebAPI

WebAPI常用特性

API接口设计规范

API接口要使用Token

尽量使用POST作为接口的请求方式

客户端IP白名单

单接口限流

记录接口请求日志

敏感数据脱敏

接口的幂等性

什么是幂等性

为什么要考虑幂等性

WebAPI中哪些动作是幂等的?

如何解决幂等性问题

分布式ID生成器

是什么

雪花算法原理

雪花算法结构

雪花算法优点

雪花算法缺点

响应状态码

RESTful是什么

  1. RESTful就是根据HTTP的请求方法去匹配服务器上面的API接口。
  2. 相当于把服务器上面的服务进行了资源化,具有统一的URL地址,然后提供了增删改查四个功能。

WebService/WCF/WebAPI

  1. WebService是基于SOAP协议实现的,数据格式是XML,在网络传输的过程中只支持HTTP协议。
  2. WCF也是基于SOAP协议实现的,数据格式也是XML,但是在网络传输的过程中可以支持HTTP,HTTPS, TCP多种协议。
  3. WebAPI是基于HTTP协议实现的,在网络传输的过程中可以支持HTTP和HTTPS这两种协议,数据格 式是JSON。

WebAPI常用特性

  1. FromForm对应的Content-Type是application/x-www-form-urlencoded类型,获取的是HTTP请求体中 的表单数据。
  2. FromBody对应的Content-Type是application/json类型,获取的是HTTP请求体中的JSON格式的数据。
  3. FromServices是从IOC容器里面找到这个类型的对象,并把它设置到方法的参数中,不需要通过构造函 数的方式进行注入,属于方法注入。

API接口设计规范

API接口要使用Token

  1. 使用Token能做到单点登录,也能保证接口的安全性。
  2. 鉴权中心根据账号和密码生成Token,HTTP请求带着Token就可以访问API接口,API接口也认可这个 Token,不需要再去鉴权中心进行校验,第三方的API接口也认可这个Token,这种模式就是单点登录, 也叫做SSO。

尽量使用POST作为接口的请求方式

  1. 接口最常用的两种请求方式就是GET和POST。
  2. 但是GET请求会将参数暴露在浏览器的URL地址中,浏览器对URL的地址长度也有限制。
  3. 所以为了更高的安全性,尽量都采用POST方式发送HTTP请求。
  1. POST方法比GET方法更安全,它也仅限于数据在浏览器的地址栏上不可见。
  2. 从数据传输的角度来说,它们都是不安全的,因为HTTP在网络上是明文传输的,如果在网络节点上被 抓包,就能够获取完整的数据报文。
  3. 所以想要比较安全的数据传输,就只能加密,也就是使用HTTPS。

客户端IP白名单

  1. 有些接口比较特殊,对于公司来说,这部分接口只能让一部分用户进行使用。
  2. 所以可以将这些接口的访问权限只对部分的IP进行开放。
  3. Nginx和Ocelot都可以设置IP的白名单。
  4. 如果想要简单一点,可以使用服务器的防火墙规则进行白名单的设置。

单接口限流

  1. 有些接口用户调用的次数非常频繁,再加上用户的数量非常庞大,会导致消耗比较多的网络带宽,对 数据库也会造成不小的压力。
  2. 所以可以对这些接口进行限流,限制这些接口单位时间内的访问量。
  3. Nginx和Ocelot都可以进行IP限流。
  4. 也可以使用Redis对接口的调用次数进行统计,可以将IP地址加上接口地址作为Key,访问的次数作 为Value,每次请求成功Value就加1,然后设置一个过期时长来限制接口的调用频率。

记录接口请求日志

  1. 可以使用Interceptor拦截器来记录进入某个方法前后的日志。
  2. ActionFilterAttribute也可以记录进入方法前后的日志。
  3. 还可以使用ExecptionFilterAttribute记录接口的异常信息。

敏感数据脱敏

  1. 在接口的调用过程中,可能会涉及到一些敏感的数据,这些数据通常需要进行脱敏处理,最常用的方 式就是加密。
  2. 加密的方式可以使用安全性比较高的RSA非对称可逆加密。
  3. 对方把加密之后的数据,通过公钥解密成功之后才能获取到明文的信息。

接口的幂等性

什么是幂等性

  1. 幂等性是指一个方法被多次重复执行时,结果要和第一次执行的结果保持一致。
  2. 再说的直白一点,就是查询的操作无论查询多少次都不会影响数据本身的结果,所以查询的操作就是 幂等的。
  3. 但是新增的操作,每执行一次数据库就会发生变化,所以新增的操作就是非幂等的。

为什么要考虑幂等性

  1. 在网络通信的过程中,有两种行为都有可能会导致接口被重复的执行。
  2. 第一种是用户的重复提交或者用户的恶意攻击。
  3. 第二种就是为了避免数据丢失,采用的超时重试机制。
  4. 这两种情况都有可能会导致服务的接口被重复的调用。
  5. 所以在程序的设计过程中,对于数据变更类的接口,需要保证接口的幂等性。

WebAPI中哪些动作是幂等的?

  1. GET是安全并且幂等的,适合查询类接口使用。
  2. POST是不安全并且不幂等的,适合提交类接口使用。
  3. PUT是不安全但是幂等的,适合更新类接口使用。
  4. DELETE是不安全但是幂等的,适合删除类接口使用。

如何解决幂等性问题

  1. 使用数据库的唯一约束实现幂等,对于数据插入类的场景,如果进行多次调用就会触发数据库的唯一 约束异常,从而能避免一个请求创建多条数据的问题。
  2. 使用乐观锁。
  3. 使用Redis数据库提供的SETNX指令,对于MQ消费的场景,为了避免MQ重复消费导致数据多次被 修改的问题,可以在接受到MQ的消息时,把这个消息通过SETNX指令写入到Redis数据库中,一旦 这个消息被消费过了,就不会再次消费了。
  4. 可以提供一个生成随机数的接口,随机数全局唯一,调用接口的时候带入随机数。
  1. 第一次调用的时候,等业务处理完成之后,将随机数作为Key,操作的结果作为Value,存入到 Redis中,同时设置过期时长。
  2. 第二次调用的时候,查询Redis,如果Key存在,说明是重复的提交,直接返回错误。

分布式ID生成器

是什么

  1. 如果是分布式的环境,不能使用数据库本身的自增ID来生成主键值,在分布式的环境中可能会导致有 重复的ID值。
  2. 可以考虑使用GUID,或者雪花ID来生成唯一的主键值。

雪花算法原理

雪花ID就是使用一个64位的long型数字作为全局唯一的ID。

雪花算法结构

  1. 第一个bit表示0,long在C#中是带符号的,最高位是符号位,正数是0,负数是1。因为生成的 ID 都是正数,所以第一个bit统一都是0。
  2. 接下来的41个bit表示毫秒级的时间戳,换算成年就是69年时间。
  3. 再接下来的10个bit用来记录服务器的ID,表示服务最多可以部署在1024台服务器上面。

最后的12个bit用来记录同一个毫秒内产生的不同ID,能生产的最大ID数量是4096。

C# WebAPI学习总结_第1张图片

雪花算法优点

  1. 雪花ID在高并发的分布式环境中能保证主键的ID值不重复。
  2. 雪花算法是在内存中进行的,所以生成的效率也比较高。
  3. 雪花算法也是基于时间戳的,所以可以保证最基本的有序递增。

雪花算法缺点

雪花算法主要依赖于服务器的时间,如果服务器的时间回拨可能会产生重复的ID。

响应状态码

  1. 1开头的表示服务器收到了请求,需要请求者继续执行操作。
  2. 2开头的表示成功。比如200表示常规的请求。201表示创建成功。
  3. 3开头的表示重定向,需要进一步的操作才能完成请求。比如301表示永久的重定向。302表示暂时的 重定向。
  4. 4开头的表示客户端的错误,请求包含错误或者无法完成请求。比如401表示鉴权失败,需要进行身 份认证。403表示授权失败,当前的请求没有权限。404表示请求的路径不存在。405表示请求的方法 不存在。
  5. 5开头的表示服务器的错误。比如500表示服务器的异常。

你可能感兴趣的:(c#,.net,restful)