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. 设计模式-建造者模式(Builder Pattern)

    建造者模式(Builder Pattern):将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. 建造者模式要求建造过程中是稳定的. Android 用到的 Builder 模 ...

  2. javascript原生代码取单选框的值

    网上搜索到的,项目中正好用到,先记下来,以后直接从自己的博客上复制粘贴!!! //取单选框选择中的值,传入单选框的name function getRadioBoxValue(radioName) { ...

  3. 深入理解Linux内核-进程

    1.进程的静态特性 进程:程序执行时的一个实例 进程描述符(task_struct): 进程的基本信息(thread_info).指向内存区描述符的指针(mm_struct).进程相关的tty(tty ...

  4. dom4j: 生成的XML文件根节点 xmlns="" 的问题

    使用dom4j写入XML文件时,写入完毕后发现root element中没有 xmlns,也即是没有命名空间. 正确的写法如下: Document document = DocumentHelper. ...

  5. 解决failed to get the required adt version from sdk version

    在网上看了很多,选择其中的一个解决方法试了下, 还行. AS 2.3之后不能和Eclipse共用一个SDK,给Eclispe重新配置一个SDK路径

  6. 【小白的CFD之旅】22 好网格与坏网格

    网格疏密网格形状其他的一些问题小白的总结郑重申明 网格的作用如此重要,以至于小白纠结了很久.小白知道网格划分过程很大程度上受制于计算资源的限制,但小白还是不太明白,如果计算资源非常充足,不用顾忌资源限 ...

  7. 正确使用 Volatile 变量

    Java 语言中的 volatile 变量可以被看作是一种 “程度较轻的 synchronized”:与 synchronized 块相比,volatile 变量所需的编码较少,并且运行时开销也较少, ...

  8. linux Ctrl+z和Ctrl+c的区别

    1.Ctrl+z 挂起进程,并不会结束,执行fg命令可以重新启动这个被挂起的命令. 2.Ctrl+c 终止进程

  9. hive的UDF读取配置文件

    hive的UDF读取配置文件 实现步骤 在读取配置文件的写为./file_name,然后在添加UDF的时候把配置文件也加入资源就好了: add jar xxx.jar; add file file_n ...

  10. 我的Linux学习之路及参考书籍

    学习目的 很简单的考虑,最近在各大招聘网站上找工作,发现多数c/c++开发职位都需要Linux开发经验,让我很苦恼,因为Linux我到目前为止知之甚少,知道Linux的概念,也在大学期间了解过一段时间 ...