web系统接口设计总结

一、前言

在前后端完全分离的开发模式或者说是架构模式下,后端开发者只需要编写后端接口,特别是restful风格接口更为常见。那么暴露给外面的接口大概有三个常见。1、给后台系统调用的接口,2、对客端应用的接口(APP或者H5页面),3、第三方系统调用接口。那么同一个系统下怎么保证接口的安全性。应该怎么设计,本节做一下子总结

二、token的制作

系统对外提供部分接口,为了保证软件数据的安全性,可以通过设置token令牌来校验请求方是否合法。 比较流行的JWT来实现。
实现步骤:客户端每次访问接口的时候,要在header中携带token令牌,然后在项目的拦截器中使用相应的策略配置拦截这些对外接口的请求(例如这一类接口的url统一配置为/api/开头),拦截到请求后从header中得到token进行校验,校验通过后即可放行。通过不了返回相应状态码,客户端得到状态码携带账号和密码向服务端申请token,服务端验证账号密码合法后生成token返回,token具有时效性。

三、实现token

引入依赖

<dependency>
    <groupId>com.auth0</groupId>
    <artifactId>java-jwt</artifactId>
    <version>3.4.0</version>
</dependency>

生成token与校验token

import java.util.Date;
import java.util.HashMap;
import java.util.Map;

import com.auth0.jwt.JWT;
import com.auth0.jwt.JWTVerifier;
import com.auth0.jwt.algorithms.Algorithm;

public class TokenManager {

	//私钥
	private static final String SECRET = "Axmk89Li3Aji9M";

	//过期时间1分钟
	private static final int expiresTime = 60000;
	
	public static String createToken(Long userId){
		//获取加上过期时间后的时间
		Date nowDate = new Date();
		System.out.println(nowDate);
		Date expiresDate = new Date(System.currentTimeMillis()+expiresTime);
		Map<String,Object> map = new HashMap<String,Object>();
		map.put("alg", "HS256");
		map.put("typ", "JWT");
		String token = JWT.create().withHeader(map)	//请求头
		.withClaim("iss", "Service")	//签发方
		.withClaim("aud", "Client")		//接收方
		.withClaim("userId", null==userId?null:userId.longValue()) //存储信息,用户ID
		.withIssuedAt(nowDate)		//当前时间
		.withExpiresAt(expiresDate)		//过期时间
		.sign(Algorithm.HMAC256(SECRET));		//私钥
		
		return token;
	}
	
	public static boolean verifyToken(String token){
		try{
			JWTVerifier verifier = JWT.require(Algorithm.HMAC256(SECRET)).build();
			verifier.verify(token);
			//DecodedJWT verify = verifier.verify(token);
			//return verify.getClaims();	//能返回数据集合(用于在jwt中存储一些数据)的,但是由于这一版本只需要核验token是否合法,所以只需要返回true和false;
			return true;
		}catch(Exception e){
			log.error(e.getMessage(), e);
			return false;
		}
	}
}

四、校验接口

当然获取token的接口不需要token,可以直接请求,只是系统双方会约定获取token的参数,涉及到账号,秘钥之类的,还有传输参数涉及的加密方式。

我们可以通过编写过滤器来校验传过来的接口和携带的token


        ServerHttpRequest request = exchange.getRequest();
        ServerHttpResponse response = exchange.getResponse();
        
        String path = request.getURI().getPath();

        if (pathMatcher(resourceUrl, path)) {
            return chain.filter(exchange);
        }
        response.getHeaders().setContentType(MediaType.APPLICATION_JSON);

        //获取token
        String token=  request.getHeaders().getFirst("token");

一、引言

随着互联网技术的发展,Web系统接口设计在各类应用中扮演着越来越重要的角色。一个良好的接口设计可以提高系统的可维护性、可扩展性和用户体验。本文将对Web系统接口设计进行全面总结。

二、接口设计原则

  1. 明确性:接口定义应清晰明确,避免歧义,确保调用者正确理解接口功能。
  2. 简洁性:设计时应尽量减少不必要的复杂性,使接口易于使用和理解。
  3. 安全性:确保接口数据传输和存储的安全性,防止数据泄露和未经授权的访问。
  4. 可扩展性:为未来功能扩展预留空间,避免后期大量修改。
  5. 稳定性:确保接口在各种情况下都能稳定运行,减少因错误或异常导致的服务中断。

三、接口设计要素

  1. 请求方法(HTTP Verbs):合理使用GET、POST、PUT、DELETE等请求方法,明确各方法的用途。
  2. 路由(Routing):合理规划接口的URL结构,使其具有清晰的组织结构和语义。
  3. 参数传递:根据需求选择合适的参数传递方式(如query string, path variables, request body等)。
  4. 错误处理:定义统一的错误码和错误信息格式,以便于排查问题。
  5. 日志与监控:实施接口访问日志记录和性能监控,以便及时发现和解决问题。

四、最佳实践

  1. 版本控制:为接口使用版本号,以便于升级和维护老版本。
  2. 缓存策略:合理利用缓存减少不必要的请求,提高系统性能。
  3. 限流与防刷:设置接口访问限制,防止恶意请求对系统的冲击。
  4. 文档化:提供详细、准确的接口文档,便于开发者理解和使用。
  5. 测试与验证:实施接口测试和压力测试,确保其稳定性和性能。

五、总结与展望

一个良好的Web系统接口设计对于提高系统的整体性能和用户体验至关重要。在未来的发展中,随着技术的进步和应用需求的不断变化,Web系统接口设计将面临更多的挑战和机遇。我们应该不断学习新的设计理念和技术,不断优化和改进接口设计,以满足不断变化的市场需求。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
您好!对于C# Web API接口开发,有以下一些常见的步骤和注意事项: 1. 创建一个新的C# Web API项目:使用Visual Studio或其他适合的IDE,创建一个新的C# Web API项目。 2. 定义和设计接口:根据您的需求,确定接口的功能和数据结构。设计良好的接口能够提高代码的可读性和可维护性。 3. 实现控制器:在项目中创建控制器类,控制器类负责处理HTTP请求并返回响应。您可以使用ASP.NET Core框架中的[ApiController]特性来简化一些操作。 4. 定义路由:使用ASP.NET Core框架中的路由特性(如[HttpGet]、[HttpPost]等)来定义API的路由地址和请求方法。 5. 实现业务逻辑:在控制器中实现具体的业务逻辑,可以调用其他服务、数据库或外部API来完成相关操作。 6. 处理数据验证和错误处理:在API接口中进行输入数据的验证,并合理处理可能发生的错误,返回合适的HTTP状态码和错误信息。 7. 编写单元测试:编写单元测试来验证API接口的正确性和稳定性,可以使用xUnit、NUnit等测试框架进行单元测试。 8. 部署和发布:将API应用程序部署到适当的环境中,可以是本地IIS、云服务(如Azure、AWS)等。 需要注意的是,C# Web API开发中应该考虑安全性、性能和可扩展性等方面的需求,同时也要遵循良好的编码规范和最佳实践来提高代码质量。 希望以上信息对您有所帮助!如果您还有其他问题,请继续提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

奋力向前123

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值