Web服务端开发需要考虑的问题
API设计
是否Restful。
首先需要清楚,Restful是一种风格而不是规范,不存在必须遵守的问题。
Restful本质上是对HTTP API进行有效的分类。
分类是应该的,可以让API组织变得有序、层次清晰
一定要以Restful的风格分类吗?
Restful风格的特点
url表示的只是资源,没有动作,所以只会出现名词,不会出现动词
这样的url不对 /accounts/1/transfer/499
应该是这样 /accounts/1/transactions/499
想想传统的login、reset password在restful下要怎么办?
动作用http method来表示
针对CRUD,对应的语义分别是POST、GET、PATCH(PUT)、DELETE
- GET、PUT、DELETE是幂等的,其余不是
- PATCH表示部分更新
- PUT的确切语义是CREATE OR REPLACE
使用http状态码来表示基础的响应状态
- 200 操作成功
- 400 请求有问题;如:参数验证失败、签名验证失败等
- 401 认证失败。
- 403 无访问权限。
- 409 请求处理完成但因为业务规则限制或其他原因并未真正成功的响应
- 500 服务器错误
- 503 服务器维护中
应有的支持
版本化
客户端必须明确知道自己调用的API版本。
兼容性被破坏时+1 https://api.expample.com/v1/endpoint
为了避免同时支持多版本API时,服务端消耗过多不必要的资源,应该以微服务的方式裁剪API,不同服务独立部署、迭代。
业务编号
https://api.expample.com/v1/biz/0
资源包升级
客户端不放资源包升级的逻辑,只发出升级请求,是否升级完全由服务端决定。
强制升级
特殊情况下要求客户端连主程序包括资源包都必须升级。
https
可以使用自签名证书
数据查询DSL(?)
允许客户端直接提交DSL文本,自行决定要查询一种或多种资源,查询多种资源时,支持JOIN,并且支持结果集过滤、排序。
- DSL只读,结果集仅以二维表体现
- url表示的资源只支持单个资源的读写
- 批量资源的写操作使用业务编号
- 需要特殊结构的数据使用数据集编号
应用设计
微服务
从传统的monolithic风格到microservice,就好比原来是所有人一起搭一辆大巴前往目的地,现在改成三五成群,各自自驾前往。
- 优势在于小规模独立部署及迭代,不必牵一发动全身,灵活
- 未必会更方便、未必会降低成本,需要具体问题具体分析以及依赖具体实践
- 开发工程微服务化及部署微服务化是两回事
使用spring mvc搭载应用
把应用的依赖抽象成诸多service(注意,这里说的service与前文说微“服务”不是同一事物;以及这些service是不带业务逻辑的),可能包括且不限于:
- session
- cache
- storage
- relational db/orm
- log
- auth
- httpclient
- qrcode
- image processing
- config
- queue
- mail
- sms
- event
- schedule
后台管理
cli
面向运维及开发。
web
面向业务及运营。
Web服务端开发需要考虑的问题的更多相关文章
- Web服务端开发需要考虑的问题(续)
方案汇总API设计应用架构代码库管理工具链工作计划目标预期关键过程service-driver接口定义及实现web样例 方案汇总 API设计 基于https. 只提供纯数据. 基于一开始提出的rest ...
- Delphi XE5通过WebService开发Web服务端和手机客户端
Delphi XE5通过WebService开发Web服务端和手机客户端介绍 我们开发一个三层的android程序 建立一个webservices stand-alone vcl applicati ...
- Swift3.0服务端开发(一) 完整示例概述及Perfect环境搭建与配置(服务端+iOS端)
本篇博客算是一个开头,接下来会持续更新使用Swift3.0开发服务端相关的博客.当然,我们使用目前使用Swift开发服务端较为成熟的框架Perfect来实现.Perfect框架是加拿大一个创业团队开发 ...
- 关于如何提高Web服务端并发效率的异步编程技术
最近我研究技术的一个重点是java的多线程开发,在我早期学习java的时候,很多书上把java的多线程开发标榜为简单易用,这个简单易用是以C语言作为参照的,不过我也没有使用过C语言开发过多线程,我只知 ...
- Web服务端软件的服务品质概要
软件品质概述 提供同样功能.产品和服务的服务者中, 竞争力来自功能的多样化和服务品质的差异化, 无论是个体.企业还是国家. 这里的服务指功能.产品的实现程度和处理能力,以及研发/客服提供的技术支持程度 ...
- 在线教学、视频会议 Webus Fox(2) 服务端开发手册
上次在<在线教学.视频会议软件 Webus Fox(1)文本.语音.视频聊天及电子白板基本用法>里介绍了软件的基本用法.本文主要介绍服务器端如何配置.开发. 1. 配置 1.1 IIS配置 ...
- 如何提高Web服务端并发效率的异步编程技术
作为一名web工程师都希望自己做的web应用能被越来越多的人使用,如果我们所做的web应用随着用户的增多而宕机了,那么越来越多的人就会变得越来越少了,为了让我们的web应用能有更多人使用,我们就得提升 ...
- 如何有效快速提高Java服务端开发人员的技术水平?
我相信很多工作了3-5年的开发人员都会经常问自己几个问题: 1.为什么总是感觉技术没有质的提高? 2.如何能够有效和快速的提高自身的技术水平? 3.如何进入到一个牛逼的大公司,认识牛逼的人? 这篇文章 ...
- Web服务端性能提升实践
随着互联网的不断发展,日常生活中越来越多的需求通过网络来实现,从衣食住行到金融教育,从口袋到身份,人们无时无刻不依赖着网络,而且越来越多的人通过网络来完成自己的需求. 作为直接面对来自客户请求的Web ...
随机推荐
- C# Split() 去除 \r\n 分组
str为读入的文本string[] ReadText = str.Replace("\r\n", "@").Split('@'); 转自 http://zhid ...
- [LintCode] N-Queens
N-Queens The n-queens puzzle is the problem of placing n queens on an n×n chessboard such that no tw ...
- HTTP 错误 404.13 - Not Found 请求筛选模块被配置为拒绝超过请求内容长度的请求。
问题:HTTP 错误 404.13 - Not Found 请求筛选模块被配置为拒绝超过请求内容长度的请求. 原因:Web 服务器上的请求筛选被配置为拒绝该请求,因为内容长度超过配置的值(IIS 7 ...
- android studio - Manifest merger failed with multiple errors, see logs
今天编译运行的时候遇到了“Error:Execution failed for task ':test:processDebugManifest'.> Manifest merger faile ...
- angular学习笔记(三十)-指令(4)-transclude
本篇主要介绍指令的transclude属性: transclude的值有三个: 1.transclude:false(默认值) 不启用transclude功能. 2.transclude:true 启 ...
- vue中的filters的用法
1.效果 金额保留两位小数,并加上单位元 2.index.html <!DOCTYPE html> <html lang="en"> <head> ...
- 每日英语:Teens Are Still Developing Empathy Skills
The teen years are often fraught with door-slamming, eye-rolling and seeming insensitivity, even by ...
- Java 编程下简介 Class 与类加载
即使有一个类并对它一无所知,但其实它本身就包含了许多信息,Java 在需要使用到某个类时才会将类加载,并在 JVM 中以一个 java.lang.Class 的实例存在.从 Calss 实例开始,可以 ...
- 【转帖】(一)unity4.6Ugui中文教程文档-------概要
原帖至上,移步请戳:(一)unity4.6Ugui中文教程文档-------概要 unity4.6中的一个重要的升级就是GUI ,也把它称为UGUI ,废话我不多说,大家可以百度了解一下. 虽然现在处 ...
- HBase操作(Shell与Java API)
版权声明:本文为博主原创文章,未经博主允许不得转载. 转: http://blog.csdn.net/u013980127/article/details/52443155 下面代码在Hado ...
是否Restful。
首先需要清楚,Restful是一种风格而不是规范,不存在必须遵守的问题。
Restful本质上是对HTTP API进行有效的分类。
分类是应该的,可以让API组织变得有序、层次清晰
一定要以Restful的风格分类吗?
Restful风格的特点
url表示的只是资源,没有动作,所以只会出现名词,不会出现动词
这样的url不对/accounts/1/transfer/499
应该是这样/accounts/1/transactions/499
想想传统的login、reset password在restful下要怎么办?
动作用http method来表示
针对CRUD,对应的语义分别是POST、GET、PATCH(PUT)、DELETE- GET、PUT、DELETE是幂等的,其余不是
- PATCH表示部分更新
- PUT的确切语义是CREATE OR REPLACE
使用http状态码来表示基础的响应状态
- 200 操作成功
- 400 请求有问题;如:参数验证失败、签名验证失败等
- 401 认证失败。
- 403 无访问权限。
- 409 请求处理完成但因为业务规则限制或其他原因并未真正成功的响应
- 500 服务器错误
- 503 服务器维护中
应有的支持
版本化
客户端必须明确知道自己调用的API版本。
兼容性被破坏时+1 https://api.expample.com/v1/endpoint
为了避免同时支持多版本API时,服务端消耗过多不必要的资源,应该以微服务的方式裁剪API,不同服务独立部署、迭代。业务编号
https://api.expample.com/v1/biz/0资源包升级
客户端不放资源包升级的逻辑,只发出升级请求,是否升级完全由服务端决定。强制升级
特殊情况下要求客户端连主程序包括资源包都必须升级。https
可以使用自签名证书
数据查询DSL(?)
允许客户端直接提交DSL文本,自行决定要查询一种或多种资源,查询多种资源时,支持JOIN,并且支持结果集过滤、排序。
- DSL只读,结果集仅以二维表体现
- url表示的资源只支持单个资源的读写
- 批量资源的写操作使用业务编号
- 需要特殊结构的数据使用数据集编号
微服务
从传统的monolithic风格到microservice,就好比原来是所有人一起搭一辆大巴前往目的地,现在改成三五成群,各自自驾前往。
- 优势在于小规模独立部署及迭代,不必牵一发动全身,灵活
- 未必会更方便、未必会降低成本,需要具体问题具体分析以及依赖具体实践
- 开发工程微服务化及部署微服务化是两回事
使用spring mvc搭载应用
把应用的依赖抽象成诸多service(注意,这里说的service与前文说微“服务”不是同一事物;以及这些service是不带业务逻辑的),可能包括且不限于:
- session
- cache
- storage
- relational db/orm
- log
- auth
- httpclient
- qrcode
- image processing
- config
- queue
- sms
- event
- schedule
后台管理
cli
面向运维及开发。web
面向业务及运营。
Web服务端开发需要考虑的问题的更多相关文章
- Web服务端开发需要考虑的问题(续)
方案汇总API设计应用架构代码库管理工具链工作计划目标预期关键过程service-driver接口定义及实现web样例 方案汇总 API设计 基于https. 只提供纯数据. 基于一开始提出的rest ...
- Delphi XE5通过WebService开发Web服务端和手机客户端
Delphi XE5通过WebService开发Web服务端和手机客户端介绍 我们开发一个三层的android程序 建立一个webservices stand-alone vcl applicati ...
- Swift3.0服务端开发(一) 完整示例概述及Perfect环境搭建与配置(服务端+iOS端)
本篇博客算是一个开头,接下来会持续更新使用Swift3.0开发服务端相关的博客.当然,我们使用目前使用Swift开发服务端较为成熟的框架Perfect来实现.Perfect框架是加拿大一个创业团队开发 ...
- 关于如何提高Web服务端并发效率的异步编程技术
最近我研究技术的一个重点是java的多线程开发,在我早期学习java的时候,很多书上把java的多线程开发标榜为简单易用,这个简单易用是以C语言作为参照的,不过我也没有使用过C语言开发过多线程,我只知 ...
- Web服务端软件的服务品质概要
软件品质概述 提供同样功能.产品和服务的服务者中, 竞争力来自功能的多样化和服务品质的差异化, 无论是个体.企业还是国家. 这里的服务指功能.产品的实现程度和处理能力,以及研发/客服提供的技术支持程度 ...
- 在线教学、视频会议 Webus Fox(2) 服务端开发手册
上次在<在线教学.视频会议软件 Webus Fox(1)文本.语音.视频聊天及电子白板基本用法>里介绍了软件的基本用法.本文主要介绍服务器端如何配置.开发. 1. 配置 1.1 IIS配置 ...
- 如何提高Web服务端并发效率的异步编程技术
作为一名web工程师都希望自己做的web应用能被越来越多的人使用,如果我们所做的web应用随着用户的增多而宕机了,那么越来越多的人就会变得越来越少了,为了让我们的web应用能有更多人使用,我们就得提升 ...
- 如何有效快速提高Java服务端开发人员的技术水平?
我相信很多工作了3-5年的开发人员都会经常问自己几个问题: 1.为什么总是感觉技术没有质的提高? 2.如何能够有效和快速的提高自身的技术水平? 3.如何进入到一个牛逼的大公司,认识牛逼的人? 这篇文章 ...
- Web服务端性能提升实践
随着互联网的不断发展,日常生活中越来越多的需求通过网络来实现,从衣食住行到金融教育,从口袋到身份,人们无时无刻不依赖着网络,而且越来越多的人通过网络来完成自己的需求. 作为直接面对来自客户请求的Web ...
随机推荐
- C# Split() 去除 \r\n 分组
str为读入的文本string[] ReadText = str.Replace("\r\n", "@").Split('@'); 转自 http://zhid ...
- [LintCode] N-Queens
N-Queens The n-queens puzzle is the problem of placing n queens on an n×n chessboard such that no tw ...
- HTTP 错误 404.13 - Not Found 请求筛选模块被配置为拒绝超过请求内容长度的请求。
问题:HTTP 错误 404.13 - Not Found 请求筛选模块被配置为拒绝超过请求内容长度的请求. 原因:Web 服务器上的请求筛选被配置为拒绝该请求,因为内容长度超过配置的值(IIS 7 ...
- android studio - Manifest merger failed with multiple errors, see logs
今天编译运行的时候遇到了“Error:Execution failed for task ':test:processDebugManifest'.> Manifest merger faile ...
- angular学习笔记(三十)-指令(4)-transclude
本篇主要介绍指令的transclude属性: transclude的值有三个: 1.transclude:false(默认值) 不启用transclude功能. 2.transclude:true 启 ...
- vue中的filters的用法
1.效果 金额保留两位小数,并加上单位元 2.index.html <!DOCTYPE html> <html lang="en"> <head> ...
- 每日英语:Teens Are Still Developing Empathy Skills
The teen years are often fraught with door-slamming, eye-rolling and seeming insensitivity, even by ...
- Java 编程下简介 Class 与类加载
即使有一个类并对它一无所知,但其实它本身就包含了许多信息,Java 在需要使用到某个类时才会将类加载,并在 JVM 中以一个 java.lang.Class 的实例存在.从 Calss 实例开始,可以 ...
- 【转帖】(一)unity4.6Ugui中文教程文档-------概要
原帖至上,移步请戳:(一)unity4.6Ugui中文教程文档-------概要 unity4.6中的一个重要的升级就是GUI ,也把它称为UGUI ,废话我不多说,大家可以百度了解一下. 虽然现在处 ...
- HBase操作(Shell与Java API)
版权声明:本文为博主原创文章,未经博主允许不得转载. 转: http://blog.csdn.net/u013980127/article/details/52443155 下面代码在Hado ...