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 ...
随机推荐
- 微信小程序调用蓝牙功能控制车位锁
第一次学用微信小程序,项目需要,被逼着研究了一下,功能是调用微信小程序的蓝牙功能,连接上智能车位锁,控制升降,大概步骤及调用的小程序接口API如下: 1.打开蓝牙模块 wx.openBluetooth ...
- 用sendcloud来发邮件
平时发验证码邮件都是用免费域名邮箱,但是有时一频繁发多了就发不了了,听说用sendcloud可以避免,还能避免阿里云邮件发QQ邮箱进垃圾箱中,去注册了下,免费账户号每个月才50封,自己玩玩可以吧.. ...
- mysql中tinyint、smallint、int、bigint的区别
tinyint 从 -2^7 (-128) 到 2^7 - 1 (123) 的整型数据.存储大小为 1 个字节. unsigned 是从 0 到 255 的整型数据. 所以建表的时候 只能是tinyi ...
- confluence数据库的配置文件
mysql> select u.id,u.user_name,u.active from cwd_user u join cwd_membership m on u.id=m.child_use ...
- distinct aggregation
https://docs.google.com/document/d/1zj6OA-K2hi7ah8Fo-xTQB-mVmYfm6LsN2_NHgTCVmJI/edit# https://issues ...
- sql server FCI and always on
https://docs.microsoft.com/en-us/sql/sql-server/failover-clusters/high-availability-solutions-sql-se ...
- Linux--多网卡的7种Bond模式【转】
转自:http://www.cnblogs.com/lcword/p/5914089.html 网卡bond是通过把多张网卡绑定为一个逻辑网卡,实现本地网卡的冗余,带宽扩容和负载均衡.在应用部署中是一 ...
- Solr实现 并集式、多值、复杂 过滤查询的权限【转】
公司开发使用的搜索引擎核心是Solr,但是应为业务原因,需要相对复杂权限机制. 1)通过Solr的filterQuery可以实现field过滤,实现过滤项的效果.索引A{filter1:a,field ...
- 使用MSYS、Notepad++搭建C/C++开发环境
目标说明 本文的目标是教会大家如何用Notepad++来编写C/C++代码,并能够编译运行. 注:Notepad++是一个非常优秀的开源文本编辑器.官网地址 http://notepad-plus-p ...
- Java类的成员初始化顺序
Java类的成员初始化顺序 2017-06-01 代码: public class InitializeSequence { public static void main(String[] args ...
是否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 ...
随机推荐
- 微信小程序调用蓝牙功能控制车位锁
第一次学用微信小程序,项目需要,被逼着研究了一下,功能是调用微信小程序的蓝牙功能,连接上智能车位锁,控制升降,大概步骤及调用的小程序接口API如下: 1.打开蓝牙模块 wx.openBluetooth ...
- 用sendcloud来发邮件
平时发验证码邮件都是用免费域名邮箱,但是有时一频繁发多了就发不了了,听说用sendcloud可以避免,还能避免阿里云邮件发QQ邮箱进垃圾箱中,去注册了下,免费账户号每个月才50封,自己玩玩可以吧.. ...
- mysql中tinyint、smallint、int、bigint的区别
tinyint 从 -2^7 (-128) 到 2^7 - 1 (123) 的整型数据.存储大小为 1 个字节. unsigned 是从 0 到 255 的整型数据. 所以建表的时候 只能是tinyi ...
- confluence数据库的配置文件
mysql> select u.id,u.user_name,u.active from cwd_user u join cwd_membership m on u.id=m.child_use ...
- distinct aggregation
https://docs.google.com/document/d/1zj6OA-K2hi7ah8Fo-xTQB-mVmYfm6LsN2_NHgTCVmJI/edit# https://issues ...
- sql server FCI and always on
https://docs.microsoft.com/en-us/sql/sql-server/failover-clusters/high-availability-solutions-sql-se ...
- Linux--多网卡的7种Bond模式【转】
转自:http://www.cnblogs.com/lcword/p/5914089.html 网卡bond是通过把多张网卡绑定为一个逻辑网卡,实现本地网卡的冗余,带宽扩容和负载均衡.在应用部署中是一 ...
- Solr实现 并集式、多值、复杂 过滤查询的权限【转】
公司开发使用的搜索引擎核心是Solr,但是应为业务原因,需要相对复杂权限机制. 1)通过Solr的filterQuery可以实现field过滤,实现过滤项的效果.索引A{filter1:a,field ...
- 使用MSYS、Notepad++搭建C/C++开发环境
目标说明 本文的目标是教会大家如何用Notepad++来编写C/C++代码,并能够编译运行. 注:Notepad++是一个非常优秀的开源文本编辑器.官网地址 http://notepad-plus-p ...
- Java类的成员初始化顺序
Java类的成员初始化顺序 2017-06-01 代码: public class InitializeSequence { public static void main(String[] args ...