API设计

  1. 是否Restful。

    首先需要清楚,Restful是一种风格而不是规范,不存在必须遵守的问题。

    Restful本质上是对HTTP API进行有效的分类。

    分类是应该的,可以让API组织变得有序、层次清晰

  2. 一定要以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 服务器维护中
  3. 应有的支持

    • 版本化

      客户端必须明确知道自己调用的API版本。

      兼容性被破坏时+1 https://api.expample.com/v1/endpoint

      为了避免同时支持多版本API时,服务端消耗过多不必要的资源,应该以微服务的方式裁剪API,不同服务独立部署、迭代。

    • 业务编号

      https://api.expample.com/v1/biz/0

    • 资源包升级

      客户端不放资源包升级的逻辑,只发出升级请求,是否升级完全由服务端决定。

    • 强制升级

      特殊情况下要求客户端连主程序包括资源包都必须升级。

    • https

      可以使用自签名证书

  4. 数据查询DSL(?)

    允许客户端直接提交DSL文本,自行决定要查询一种或多种资源,查询多种资源时,支持JOIN,并且支持结果集过滤、排序。

    • DSL只读,结果集仅以二维表体现
    • url表示的资源只支持单个资源的读写
    • 批量资源的写操作使用业务编号
    • 需要特殊结构的数据使用数据集编号

应用设计

  1. 微服务

    从传统的monolithic风格到microservice,就好比原来是所有人一起搭一辆大巴前往目的地,现在改成三五成群,各自自驾前往。

    • 优势在于小规模独立部署及迭代,不必牵一发动全身,灵活
    • 未必会更方便、未必会降低成本,需要具体问题具体分析以及依赖具体实践
    • 开发工程微服务化及部署微服务化是两回事
  2. 使用spring mvc搭载应用

    把应用的依赖抽象成诸多service(注意,这里说的service与前文说微“服务”不是同一事物;以及这些service是不带业务逻辑的),可能包括且不限于:

    • session
    • cache
    • storage
    • relational db/orm
    • log
    • auth
    • httpclient
    • qrcode
    • image processing
    • config
    • queue
    • mail
    • sms
    • event
    • schedule
  3. 后台管理

    • cli

      面向运维及开发。

    • web

      面向业务及运营。

Web服务端开发需要考虑的问题的更多相关文章

  1. Web服务端开发需要考虑的问题(续)

    方案汇总API设计应用架构代码库管理工具链工作计划目标预期关键过程service-driver接口定义及实现web样例 方案汇总 API设计 基于https. 只提供纯数据. 基于一开始提出的rest ...

  2. Delphi XE5通过WebService开发Web服务端和手机客户端

    Delphi XE5通过WebService开发Web服务端和手机客户端介绍 我们开发一个三层的android程序 建立一个webservices  stand-alone vcl applicati ...

  3. Swift3.0服务端开发(一) 完整示例概述及Perfect环境搭建与配置(服务端+iOS端)

    本篇博客算是一个开头,接下来会持续更新使用Swift3.0开发服务端相关的博客.当然,我们使用目前使用Swift开发服务端较为成熟的框架Perfect来实现.Perfect框架是加拿大一个创业团队开发 ...

  4. 关于如何提高Web服务端并发效率的异步编程技术

    最近我研究技术的一个重点是java的多线程开发,在我早期学习java的时候,很多书上把java的多线程开发标榜为简单易用,这个简单易用是以C语言作为参照的,不过我也没有使用过C语言开发过多线程,我只知 ...

  5. Web服务端软件的服务品质概要

    软件品质概述 提供同样功能.产品和服务的服务者中, 竞争力来自功能的多样化和服务品质的差异化, 无论是个体.企业还是国家. 这里的服务指功能.产品的实现程度和处理能力,以及研发/客服提供的技术支持程度 ...

  6. 在线教学、视频会议 Webus Fox(2) 服务端开发手册

    上次在<在线教学.视频会议软件 Webus Fox(1)文本.语音.视频聊天及电子白板基本用法>里介绍了软件的基本用法.本文主要介绍服务器端如何配置.开发. 1. 配置 1.1 IIS配置 ...

  7. 如何提高Web服务端并发效率的异步编程技术

    作为一名web工程师都希望自己做的web应用能被越来越多的人使用,如果我们所做的web应用随着用户的增多而宕机了,那么越来越多的人就会变得越来越少了,为了让我们的web应用能有更多人使用,我们就得提升 ...

  8. 如何有效快速提高Java服务端开发人员的技术水平?

    我相信很多工作了3-5年的开发人员都会经常问自己几个问题: 1.为什么总是感觉技术没有质的提高? 2.如何能够有效和快速的提高自身的技术水平? 3.如何进入到一个牛逼的大公司,认识牛逼的人? 这篇文章 ...

  9. Web服务端性能提升实践

    随着互联网的不断发展,日常生活中越来越多的需求通过网络来实现,从衣食住行到金融教育,从口袋到身份,人们无时无刻不依赖着网络,而且越来越多的人通过网络来完成自己的需求. 作为直接面对来自客户请求的Web ...

随机推荐

  1. JAVA中如何正确的用String转Date

    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); Date date = sdf.parse( ...

  2. Spring Security教程(八):用户认证流程源码详解

    本篇文章主要围绕下面几个问题来深入源码: 用户认证流程 认证结果如何在多个请求之间共享 获取认证用户信息 一.用户认证流程 上节中提到Spring Security核心就是一系列的过滤器链,当一个请求 ...

  3. [svc][jk]磁盘的iops和吞吐量(Throught)指标

    参考 另参考 IOPS (Input/Output Per Second)即每秒的输入输出量(或读写次数),是衡量磁盘性能的主要指标之一.IOPS是指单位时间内系统能处理的I/O请求数量,一般以每秒处 ...

  4. 认识和使用Task

    对于多线程,我们经常使用的是Thread.在我们了解Task之前,如果我们要使用多核的功能可能就会自己来开线程,然而这种线程模型在.net 4.0之后被一种称为基于“任务的编程模型”所冲击,因为tas ...

  5. FFmpeg(5)-AVStream和AVCodecParameters部分参数分析

    一.AVStream AVCodecContext *codec // 已过时,使用另一个 codecpar 结构体代替. AVRational time_base // 时间基数. int64_t ...

  6. Lua官方文档与源码分析

    https://www.lua.org/source/5.3/ http://www.cppblog.com/airtrack/archive/2012/09/19/191233.html https ...

  7. linux netstat 统计连接数查看

    服务器上的一些统计数据 1)统计80端口连接数netstat -nat|grep -i "80"|wc -l 2)统计httpd协议连接数ps -ef|grep httpd|wc ...

  8. scope_identity() 与 @@identity的区别

    在一条 INSERT.SELECT INTO 或大容量复制语句完成后,@@IDENTITY 中包含语句生成的最后一个标识值.如果语句未影响任何包含标识列的表,则 @@IDENTITY 返回 NULL. ...

  9. 每天一个linux命令(4) df命令

    linux中df命令的功能是用来检查linux服务器的文件系统的磁盘空间占用情况.可以利用该命令来获取硬盘被占用了多少空间,目前还剩下多少空间等信息. 1.命令格式: df [选项] [文件] 2.命 ...

  10. 在 Yosemite 装 Jave 的方法. ( 适用于 OS X 10.10 )

    因为并非所有用户都用得着 Java ,所以在默认状态下 OS X 不预装 Java , 如果你需要的话可以手动安装. 1. http://support.apple.com/kb/DL1572到苹果官 ...