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

求解惑如何设计RESTFUL服务?-Python教程

php中文网(www.php.cn)提供了最全的编程技术基础教程,介绍了HTML、CSS、Javascript、Python,Java,Ruby,C,PHP,MySQL等各种编程语言的基础知识。同时本站中也提供了大量的在线实例,通过实例,您可以更好的学习编程。..

回复内容:

楼主应该对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归入业务操作,考虑数据库如何去配合业务流程。
推荐阅读
  • ElasticSerach初探第一篇认识ES+环境搭建+简单MySQL数据同步+SpringBoot整合ES
    一、认识ElasticSearch是一个基于Lucene的开源搜索引擎,通过简单的RESTfulAPI来隐藏Lucene的复杂性。全文搜索,分析系统&# ... [详细]
  • MySQL笔记_MySQL笔记1|数据库17问17答
    本文由编程笔记#小编为大家整理,主要介绍了MySQL笔记1|数据库17问17答相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 11月26日,由中国计算机协会(CCF)主办,CCF大数据专家委员会协办,CSDN承办的Hadoop与大数据技术大会(Hadoop&BigDataTechnology ... [详细]
  • Java工程师书单(初级,中级,高级)
    简介怎样学习才能从一名Java初级程序员成长为一名合格的架构师,或者说一名合格的架构师应该有怎样的技术知识体系,这是不仅一个刚刚踏入职场的初级程序员也是工作一两年之后开始迷茫的程序 ... [详细]
  • 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是如何被黑的 ... [详细]
  • 什么是堡垒机?堡垒机是一个主机系统,其自身通常经过了一定的加固,具有较高的安全性,可抵御一定的攻击,其作用主 ... [详细]
  • 本文比较了eBPF和WebAssembly作为云原生VM的特点和应用领域。eBPF作为运行在Linux内核中的轻量级代码执行沙箱,适用于网络或安全相关的任务;而WebAssembly作为图灵完备的语言,在商业应用中具有优势。同时,介绍了WebAssembly在Linux内核中运行的尝试以及基于LLVM的云原生WebAssembly编译器WasmEdge Runtime的案例,展示了WebAssembly作为原生应用程序的潜力。 ... [详细]
  • 本文讨论了B360主板是否可以安装win7系统的问题。由于B360主板不支持win7系统且缺乏官方驱动的支持,安装win7系统可能存在兼容性和稳定性问题。然而,通过借助USB3.0转接卡,B360主板仍然可以安装win7系统,但USB接口无法使用。相比之下,B365主板可以直接支持win7系统,并提供了相应的驱动,具有更好的稳定性和兼容性。选择合适的主板对于安装win7系统至关重要。 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
author-avatar
vegg巛iegbaby
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有