restful参数规则讨论

本贴最后更新于 3195 天前,其中的信息可能已经天翻地覆

关于 restful 参数规则 哪种比较合理?

返回值:

  1. code:200,message:"succ", id:"12", name:"course12"
  2. code:200,message:"succ", data:{id:"12", name:"course12"}

入参:

  1. token:"123456", id:"12", name:"course12"
  2. token:"123456", data:{id:"12", name:"course12"}

如果做合法性验证??

以及是否增加时间戳验证??

我之前做了时间戳 遇到的比较坑的事是 客户端(手机)的时间不准。。调了系统时间导致 app 没数据了。。。

合法性验证 之前做的 是把所有参数 进行 SHA-1 签名 然后服务端验证参数是否被串改

再补充一个问题

关于接口版本控制,你们是放在 path 里 还是 参数 params 里?

我觉得 path 里直观 @PathVariable, 但是不合法就直接被 spring 返回了

如果放到参数里,可以增加更多控制操作

  • RESTful

    一种软件架构设计风格而不是标准,提供了一组设计原则和约束条件,主要用于客户端和服务器交互类的软件。基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制。

    30 引用 • 114 回帖
  • 参数
    6 引用 • 45 回帖
  • 合法性
    1 引用 • 28 回帖
  • 时间戳
    1 引用 • 28 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
  • 88250

    @crick77 加油加油,注意休息哈~

  • 其他回帖
  • crick77
    作者

    @88250

    返回值

    • 统一返回 200 是正确的 可以确认是否连接到接口处理
    • code 不建议使用 bool,不推荐 0,因为 int 默认是 0,boolean 有些语言 也会对 0 有默认,所以如果是 int 建议使用 1、2,更推荐 String,没有歧义,最近遇到的一个问题是 int 经过 json 转换之后变成了 double (1 变成了 1.0)
    • 是把返回的业务参数和 系统参数(状态 code,描述 message)等放在一个 map 中进行 json 转换,写错了 是 name:"course12"

    版本

    “服务端版本分明,天然的路由控制” 是说

    @RequestMapping(value={"/api/v1/bag/add"})

    而不是

    @RequestMapping(value={"/api/{versiokn}/bag/add"})

    ??

    合法性这个我再看一遍 不过我说的时间戳的坑 你一般把时间戳校验多长时间,我遇到过太多次 手机时间不准的 ,如果时间校验期限是几天的话 觉得也没有什么意义了

  • crick77
    作者

    @88250

    报错是因为 HandlerMethod 没有指定入参类型
    指定之后 因为参数有 @PathVariable 所以报错, 解决方法正在查找

    在思考 是通过 http 请求的方式单元测试 还是通过反射机制

  • crick77 1
    作者

    @88250
    调通了 之前是 spring3.1 利用 RequestMappingHandlerAdapter 通过反射 测试方法
    现在是 3.2.9 通过 MockMvc 模拟方法测试 MockMvc 开头的这几个类 封装的方法不错 够用了 测试用例完善一下 就可以赶赶任务了
    测试有时间的话 再写一篇 挺有意思的 4.0 之后的测试更简单

    public class BagApiTest extends BaseUnitTest {
    
    	@Autowired
    	private WebApplicationContext wac;
    
    	private MockMvc mockMvc;
    
    	@Before
    	public void setup() {
    		this.mockMvc = MockMvcBuilders.webAppContextSetup(this.wac).build();
    	}
    
    	@Test
    	public void addTest() throws Exception {
    
    		MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders.post("/api/1/bag/add.do");
    		requestBuilder.param("specId", GuidKeyGenerator.getUUIDKey());
    
    		ResultActions result = mockMvc.perform(requestBuilder);
    
    		MvcResult mvc = result.andExpect(MockMvcResultMatchers.status().isOk())
    //				.andDo(MockMvcResultMatchers.print())
    				.andReturn();
    
    		Map<String, Object> resultMap = mvc.getModelAndView().getModel();
    	}
    }
    
  • 查看全部回帖

推荐标签 标签

  • DevOps

    DevOps(Development 和 Operations 的组合词)是一组过程、方法与系统的统称,用于促进开发(应用程序/软件工程)、技术运营和质量保障(QA)部门之间的沟通、协作与整合。

    51 引用 • 25 回帖
  • Swagger

    Swagger 是一款非常流行的 API 开发工具,它遵循 OpenAPI Specification(这是一种通用的、和编程语言无关的 API 描述规范)。Swagger 贯穿整个 API 生命周期,如 API 的设计、编写文档、测试和部署。

    26 引用 • 35 回帖 • 4 关注
  • Elasticsearch

    Elasticsearch 是一个基于 Lucene 的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于 RESTful 接口。Elasticsearch 是用 Java 开发的,并作为 Apache 许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。

    117 引用 • 99 回帖 • 213 关注
  • 服务器

    服务器,也称伺服器,是提供计算服务的设备。由于服务器需要响应服务请求,并进行处理,因此一般来说服务器应具备承担服务并且保障服务的能力。

    126 引用 • 589 回帖 • 2 关注
  • 大疆创新

    深圳市大疆创新科技有限公司(DJI-Innovations,简称 DJI),成立于 2006 年,是全球领先的无人飞行器控制系统及无人机解决方案的研发和生产商,客户遍布全球 100 多个国家。通过持续的创新,大疆致力于为无人机工业、行业用户以及专业航拍应用提供性能最强、体验最佳的革命性智能飞控产品和解决方案。

    2 引用 • 14 回帖
  • C

    C 语言是一门通用计算机编程语言,应用广泛。C 语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。

    85 引用 • 165 回帖 • 1 关注
  • Windows

    Microsoft Windows 是美国微软公司研发的一套操作系统,它问世于 1985 年,起初仅仅是 Microsoft-DOS 模拟环境,后续的系统版本由于微软不断的更新升级,不但易用,也慢慢的成为家家户户人们最喜爱的操作系统。

    223 引用 • 474 回帖 • 1 关注
  • Redis

    Redis 是一个开源的使用 ANSI C 语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value 数据库,并提供多种语言的 API。从 2010 年 3 月 15 日起,Redis 的开发工作由 VMware 主持。从 2013 年 5 月开始,Redis 的开发由 Pivotal 赞助。

    286 引用 • 248 回帖 • 41 关注
  • OAuth

    OAuth 协议为用户资源的授权提供了一个安全的、开放而又简易的标准。与以往的授权方式不同之处是 oAuth 的授权不会使第三方触及到用户的帐号信息(如用户名与密码),即第三方无需使用用户的用户名与密码就可以申请获得该用户资源的授权,因此 oAuth 是安全的。oAuth 是 Open Authorization 的简写。

    36 引用 • 103 回帖 • 18 关注
  • Hibernate

    Hibernate 是一个开放源代码的对象关系映射框架,它对 JDBC 进行了非常轻量级的对象封装,使得 Java 程序员可以随心所欲的使用对象编程思维来操纵数据库。

    39 引用 • 103 回帖 • 718 关注
  • IPFS

    IPFS(InterPlanetary File System,星际文件系统)是永久的、去中心化保存和共享文件的方法,这是一种内容可寻址、版本化、点对点超媒体的分布式协议。请浏览 IPFS 入门笔记了解更多细节。

    21 引用 • 245 回帖 • 246 关注
  • C++

    C++ 是在 C 语言的基础上开发的一种通用编程语言,应用广泛。C++ 支持多种编程范式,面向对象编程、泛型编程和过程化编程。

    107 引用 • 153 回帖 • 1 关注
  • Git

    Git 是 Linux Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。

    209 引用 • 358 回帖
  • Log4j

    Log4j 是 Apache 开源的一款使用广泛的 Java 日志组件。

    20 引用 • 18 回帖 • 27 关注
  • Markdown

    Markdown 是一种轻量级标记语言,用户可使用纯文本编辑器来排版文档,最终通过 Markdown 引擎将文档转换为所需格式(比如 HTML、PDF 等)。

    169 引用 • 1522 回帖
  • CentOS

    CentOS(Community Enterprise Operating System)是 Linux 发行版之一,它是来自于 Red Hat Enterprise Linux 依照开放源代码规定释出的源代码所编译而成。由于出自同样的源代码,因此有些要求高度稳定的服务器以 CentOS 替代商业版的 Red Hat Enterprise Linux 使用。两者的不同在于 CentOS 并不包含封闭源代码软件。

    239 引用 • 224 回帖
  • Sandbox

    如果帖子标签含有 Sandbox ,则该帖子会被视为“测试帖”,主要用于测试社区功能,排查 bug 等,该标签下内容不定期进行清理。

    413 引用 • 1246 回帖 • 590 关注
  • 安装

    你若安好,便是晴天。

    132 引用 • 1184 回帖
  • CloudFoundry

    Cloud Foundry 是 VMware 推出的业界第一个开源 PaaS 云平台,它支持多种框架、语言、运行时环境、云平台及应用服务,使开发人员能够在几秒钟内进行应用程序的部署和扩展,无需担心任何基础架构的问题。

    5 引用 • 18 回帖 • 176 关注
  • Spark

    Spark 是 UC Berkeley AMP lab 所开源的类 Hadoop MapReduce 的通用并行框架。Spark 拥有 Hadoop MapReduce 所具有的优点;但不同于 MapReduce 的是 Job 中间输出结果可以保存在内存中,从而不再需要读写 HDFS,因此 Spark 能更好地适用于数据挖掘与机器学习等需要迭代的 MapReduce 的算法。

    74 引用 • 46 回帖 • 562 关注
  • GitLab

    GitLab 是利用 Ruby 一个开源的版本管理系统,实现一个自托管的 Git 项目仓库,可通过 Web 界面操作公开或私有项目。

    46 引用 • 72 回帖 • 2 关注
  • Sphinx

    Sphinx 是一个基于 SQL 的全文检索引擎,可以结合 MySQL、PostgreSQL 做全文搜索,它可以提供比数据库本身更专业的搜索功能,使得应用程序更容易实现专业化的全文检索。

    1 引用 • 219 关注
  • Quicker

    Quicker 您的指尖工具箱!操作更少,收获更多!

    34 引用 • 150 回帖 • 2 关注
  • 分享

    有什么新发现就分享给大家吧!

    247 引用 • 1793 回帖 • 2 关注
  • frp

    frp 是一个可用于内网穿透的高性能的反向代理应用,支持 TCP、UDP、 HTTP 和 HTTPS 协议。

    20 引用 • 7 回帖 • 2 关注
  • Laravel

    Laravel 是一套简洁、优雅的 PHP Web 开发框架。它采用 MVC 设计,是一款崇尚开发效率的全栈框架。

    20 引用 • 23 回帖 • 726 关注
  • BND

    BND(Baidu Netdisk Downloader)是一款图形界面的百度网盘不限速下载器,支持 Windows、Linux 和 Mac,详细介绍请看这里

    107 引用 • 1281 回帖 • 39 关注