首页
技术博客
PHP教程
数据库技术
前端开发
HTML5
Nginx
php论坛
新用户注册
|
会员登录
PHP教程
技术博客
编程问答
PNG素材
编程语言
前端技术
Android
PHP教程
HTML5教程
数据库
Linux技术
Nginx技术
PHP安全
WebSerer
职场攻略
JavaScript
开放平台
业界资讯
大话程序猿
登录
极速注册
取消
热门标签 | HotTags
json
sql
nosql
firebase
odbc
mysqli
数据库
pymongo
elasticsearch
sqlserver
hbase
insert
sqlite
join
memcached
mongodb
mariadb
mysql
database
oracle
redis
当前位置:
开发笔记
>
数据库
> 正文
求解惑如何设计RESTFUL服务?
作者:米五仔8 | 来源:互联网 | 2018-05-06 11:01
回复内容: 楼主应该对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归入业务操作,考虑数据库如何去配合业务流程。
restful
nosql
安全
写下你的评论吧 !
吐个槽吧,看都看了
会员登录
|
用户注册
推荐阅读
json
Ceph API微服务实现RBD块设备的高效创建与安全删除
本文旨在实现Ceph块存储中RBD块设备的高效创建与安全删除功能。开发环境为CentOS 7,使用 IntelliJ IDEA 进行开发。首先介绍了 librbd 的基本概念及其在 Ceph 中的作用,随后详细描述了项目 Gradle 配置的优化过程,确保了开发环境的稳定性和兼容性。通过这一系列步骤,我们成功实现了 RBD 块设备的快速创建与安全删除,提升了系统的整体性能和可靠性。 ...
[详细]
蜡笔小新 2024-10-31 15:11:07
mysql
Linux学习精华:程序管理、终端种类与命令帮助获取方法综述
Linux学习精华:程序管理、终端种类与命令帮助获取方法综述 ...
[详细]
蜡笔小新 2024-10-28 13:45:59
数据库
为何Serverless将成为未来十年的主导技术领域?
为何Serverless将成为未来十年的主导技术领域? ...
[详细]
蜡笔小新 2024-10-28 09:23:05
数据库
洞见RSAC|点击获取企业安全策略“工具包”
为用户提供安全智 ...
[详细]
蜡笔小新 2024-10-19 15:49:55
database
java – 在Firestore中构造此类数据的正确方法是什么?
我从GoogleFirebase服务中看过视频并阅读了Cloudfirestore的文档,但我无法想象实时数据库.我想到了这个Web应用程序,我希望从不同类别的产品中存储我的提供程 ...
[详细]
蜡笔小新 2024-10-16 19:45:44
json
php restful 的好处,RESTful风格,这么理解试试看
谈起RESTFUL大家未免都耳熟能详,但是要介绍一下它是什么,可能就是停留在听过或者见过的阶段了。一贯喜欢以通俗的语言来消化知识的小马自然不会放过它了& ...
[详细]
蜡笔小新 2024-10-14 16:06:54
redis
Redis概念
Redis概念:redis是一款高性能的NOSQL系列的非关系型数据库什么是NOSQLNOSQL(NoSQLNotOnlySQL),意即不仅仅是SQL,是一项全新的数据库理念, ...
[详细]
蜡笔小新 2024-10-09 16:39:07
数据库
异构服务器 微服务_微服务架构的核心要点和实现原理
摘要:本文中,我们将进一步理解微服务架构的核心要点和实现原理,为读者的实践提供微服务的设计模式,以期让微服务在读者正在工作的 ...
[详细]
蜡笔小新 2024-09-30 14:35:15
oracle
今年最流行的数据库mysql,当下比较流行的数据库
本文目录一览:1、数据库有哪几种2、数据库软件 ...
[详细]
蜡笔小新 2024-09-29 17:57:01
json
常用Python库整理
记录工作和学习中遇到和使用过的Python库。Target四个Level整理Collect学习Learn练习Practice掌握Master1.Python原生和功能增强1.1py ...
[详细]
蜡笔小新 2024-09-26 15:52:28
数据库
Espresso Logic的DBaas服务将SQL存储过程封装到了RESTful API中
EspressoLogic在其DBaas服务中添加了支持SQL存储过程的RESTful终结点。\u0026#xD;\nEspressoLogic通过分析数据库架构,为 ...
[详细]
蜡笔小新 2024-09-25 15:49:59
数据库
如何设计一个安全可靠的 API 接口?
作者|阿文责编|屠敏出品|CSDN(ID:CSDNnews)最近几年,随着RESTfulAPI开始风靡,使用H ...
[详细]
蜡笔小新 2024-09-24 19:30:04
数据库
GAMETECH腾讯云游戏行业技术沙龙成都站圆满落幕
11月13日,由腾讯云主办、游戏茶馆协办的2020年首场GAME-TECH腾讯云游戏行业技术沙龙在成都圆满落幕。本次沙龙邀请了腾讯云游戏行业解决方案总监宋永周、腾讯云游戏行业高级解决方案架构师曾梓恩、腾讯云游戏行业高级产品架构师郑晓曦、腾讯云游戏行业高级解决方案架构师温球良和天美L1(王者荣耀)服务器技术副总监杨光,为参会同行们带来了干货满满的技术建议。本文介绍了腾讯云游戏云的优势和为不同游戏研运场景提供的服务。腾讯云在中国游戏云服务市场领跑,成为众多游戏开发者的合作伙伴。 ...
[详细]
蜡笔小新 2023-12-12 17:16:00
mysql
ElasticSerach初探第一篇认识ES+环境搭建+简单MySQL数据同步+SpringBoot整合ES
一、认识ElasticSearch是一个基于Lucene的开源搜索引擎,通过简单的RESTfulAPI来隐藏Lucene的复杂性。全文搜索,分析系统 ...
[详细]
蜡笔小新 2023-12-09 10:36:06
mysql
探讨HTTP隧道技术在RDP暴力破解中的应用
本文介绍了如何利用HTTP隧道技术在受限网络环境中绕过IDS和防火墙等安全设备,实现RDP端口的暴力破解攻击。文章详细描述了部署过程、攻击实施及流量分析,旨在提升网络安全意识。 ...
[详细]
蜡笔小新 2024-11-12 12:08:47
米五仔8
这个家伙很懒,什么也没留下!
Tags | 热门标签
json
sql
nosql
firebase
odbc
mysqli
数据库
pymongo
elasticsearch
sqlserver
hbase
insert
sqlite
join
memcached
mongodb
mariadb
mysql
database
oracle
redis
RankList | 热门文章
1
使用 MyEclipse 和 TestNG 测试框架在 Java 中高效进行单元测试
2
DedeCMS单页面开发指南:以“关于我们”页面为例的详细步骤与技巧
3
美国血统争议与遗传学研究进展
4
Vue 鼠标悬停触发的弹出窗口组件优化方案
5
如何使用群报数小程序进行高效接龙与统计
6
扎克伯格透露:一种新型类皮肤材料可能加速“元宇宙”愿景实现
7
如何有效防止Visual Studio控制台应用程序窗口自动关闭
8
优化Apache配置文件:httpd.conf与.htaccess的深入解析
9
Web自动化测试:表单提交与页面跳转的高效实现
10
Issue with the Reserved Term HOSTS in System Configuration
11
使用cpphttplib构建HTTP服务器以处理带有查询参数的URL请求
12
POJ 2482:窗口中的星星 —— 基于线段树、离散化与扫描线算法的优化解决方案
13
Grafana 邮件与微信告警配置指南(独立于 Alertmanager)
14
使用C语言实现三角形的绘制与输出
15
搜索技巧与注意事项:提升信息检索效率的关键点
PHP1.CN | 中国最专业的PHP中文社区 |
DevBox开发工具箱
|
json解析格式化
|
PHP资讯
|
PHP教程
|
数据库技术
|
服务器技术
|
前端开发技术
|
PHP框架
|
开发工具
|
在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved |
京公网安备 11010802041100号
|
京ICP备19059560号-4
| PHP1.CN 第一PHP社区 版权所有