热门标签 | HotTags
当前位置:  开发笔记 > 数据库 > 正文

求解惑如何设计RESTFUL服务?

回复内容: 楼主应该对REST有基本了解,所以基本概念我就不再重复,只说一下楼主比较糊涂的点资源并不是对底层存储对象或者程序Model的直接映射并不是说你有User表和Role表,就一定要设计对应的资

回复内容:

楼主应该对REST有基本了解,所以基本概念我就不再重复,只说一下楼主比较糊涂的点

资源并不是对底层存储对象或者程序Model的直接映射
并不是说你有User表和Role表,就一定要设计对应的资源。
实际上RESTful资源和底层存储服务之间的关系类似于关系式数据库内的表和视图的关系,视图是根据实际查询需要组合多个表形成的关系集合。
无论你的存储服务到底是关系式数据库还是NoSQL数据库甚至文本文件,对于访问资源的客户端来说都是一样的。

所以创建一个用户,同时设置其角色,完全可以用POST /user直接完成

// 创建具有foo和bar两个角色的新用户
POST /user
{name: (string), passwd: (string), roles: ['foo', 'bar']}
// 如果response header能够包含以下两条最好
// 以201状态响应,用Location告知新资源url
HTTP/1.1 201 Created
Location: /user/1
---------------------------------------------------------
// 修改用户的角色为foobar
PUT /user/1
{roles: ['foobar']}
---------------------------------------------------------
// 修改用户的密码
PUT /user/1
{passwd: (string)}

至于/UserRoleRelation这样粒度比较小的资源,我建议先不要,资源的粒度应该是先粗后细,根据业务后续的演化和实际需要再考虑是否抽象更细粒度的资源,一开始就搞得太细的话,任何一次操作都会被分解为多次网络IO,且系统复杂度容易搞得比较高。

把具体的数据库表映射为资源,然后把CRUD动作对应到GET/POST/PUT/DELETE上,既傻又不安全,本来这些东西都是为业务服务,因为业务需求而存在的,结果抽象时却不围绕业务设计,这是本末倒置。

正确的思路应该是,忘记什么数据库和程序Model,只从HTTP的角度考虑,根据业务,需要设计哪些资源(url),GET/POST时接受和响应哪些参数,把这些敲定之后,再从数据库和程序Model上去考虑如何配合。 Lynda上有视频教程,教你怎么设计restful api,还是不错的

Effective Design of RESTful APIs 从现在已有的框架来看,对资源的操作一般都是映射到对象方法上的。对资源的设计是粗粒度的,而不是从底层数据库出发来设计资源。用成熟的框架来完成RESTful设计,一般还是资源-对象-关系数据库,之间包含了两层映射。 楼上说的在理,RESTFUL 系统设计应该从业务出发,而不应该从底层数据库出发。
先构思你系统当中业务范畴与功能 ,然后在将数据库CRUD归入业务操作,考虑数据库如何去配合业务流程。
推荐阅读
  • Java工程师书单(初级,中级,高级)
    简介怎样学习才能从一名Java初级程序员成长为一名合格的架构师,或者说一名合格的架构师应该有怎样的技术知识体系,这是不仅一个刚刚踏入职场的初级程序员也是工作一两年之后开始迷茫的程序 ... [详细]
  • 11月26日,由中国计算机协会(CCF)主办,CCF大数据专家委员会协办,CSDN承办的Hadoop与大数据技术大会(Hadoop&BigDataTechnology ... [详细]
  • Kubernetes(k8s)基础简介
    Kubernetes(k8s)基础简介目录一、Kubernetes概述(一)、Kubernetes是什么(二& ... [详细]
  • 博客_2018年博客总结
    本文由编程笔记#小编为大家整理,主要介绍了2018年博客总结相关的知识,希望对你有一定的参考价值。前言     ... [详细]
  • 前面刚有AWS开战MongoDB,双方“隔空互呛”,这厢又曝出2亿+简历信息泄露——MongoDB的这场开年似乎“充实”得过分了些。长期以来,作为“最受欢迎的NoSQL数据库”,M ... [详细]
  • Spring Boot基础教程 ( 五 ) :构建 RESTful API 与单元测试
    首先,回顾并详细说明一下在下面我们尝试使用SpringMVC来实现一组对User对象操作的RESTf ... [详细]
  • 数据库基本介绍
    1、数据库基本知识概念:数据库:database(DB),是一种存储数据的仓库数据库是根据数据结构组织、存储和 ... [详细]
  • hackingTeam是如何被黑的
    hackingTeam是如何被黑的 ... [详细]
  • 什么是堡垒机?堡垒机是一个主机系统,其自身通常经过了一定的加固,具有较高的安全性,可抵御一定的攻击,其作用主 ... [详细]
  • 博客分类:restful笔记如何保持可见性?(a)使用HTTP方法(例如GET,POST,PUT)时,其语义要与HTTP所规定的语义保持一致,并添加适当的标头来描述请 ... [详细]
  • 本文介绍了adg架构设置在企业数据治理中的应用。随着信息技术的发展,企业IT系统的快速发展使得数据成为企业业务增长的新动力,但同时也带来了数据冗余、数据难发现、效率低下、资源消耗等问题。本文讨论了企业面临的几类尖锐问题,并提出了解决方案,包括确保库表结构与系统测试版本一致、避免数据冗余、快速定位问题等。此外,本文还探讨了adg架构在大版本升级、上云服务和微服务治理方面的应用。通过本文的介绍,读者可以了解到adg架构设置的重要性及其在企业数据治理中的应用。 ... [详细]
  • 禁止程序接收鼠标事件的工具_VNC Viewer for Mac(远程桌面工具)免费版
    VNCViewerforMac是一款运行在Mac平台上的远程桌面工具,vncviewermac版可以帮助您使用Mac的键盘和鼠标来控制远程计算机,操作简 ... [详细]
  • 本文详细介绍了云服务器API接口的概念和作用,以及如何使用API接口管理云上资源和开发应用程序。通过创建实例API、调整实例配置API、关闭实例API和退还实例API等功能,可以实现云服务器的创建、配置修改和销毁等操作。对于想要学习云服务器API接口的人来说,本文提供了详细的入门指南和使用方法。如果想进一步了解相关知识或阅读更多相关文章,请关注编程笔记行业资讯频道。 ... [详细]
  • 生成对抗式网络GAN及其衍生CGAN、DCGAN、WGAN、LSGAN、BEGAN介绍
    一、GAN原理介绍学习GAN的第一篇论文当然由是IanGoodfellow于2014年发表的GenerativeAdversarialNetworks(论文下载链接arxiv:[h ... [详细]
  • t-io 2.0.0发布-法网天眼第一版的回顾和更新说明
    本文回顾了t-io 1.x版本的工程结构和性能数据,并介绍了t-io在码云上的成绩和用户反馈。同时,还提到了@openSeLi同学发布的t-io 30W长连接并发压力测试报告。最后,详细介绍了t-io 2.0.0版本的更新内容,包括更简洁的使用方式和内置的httpsession功能。 ... [详细]
author-avatar
米五仔8
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有