精华内容
下载资源
问答
  • TCL手机结构设计规范

    2012-10-31 14:14:10
    手机结构设计规范,更标准,更规范,更专业。
  • 手机APP-UI设计规范

    2018-10-26 10:16:04
    手机APP-UI设计规范,IOS和安卓尺寸换算标准,字体大小,统一页面规范等
  • RESTful API接口设计标准规范

    万次阅读 多人点赞 2019-01-12 11:42:10
    当前的发展趋势,就是前端设备层出不穷(手机、平板、桌面电脑、其他专用设备…)。因此,必须有一种统一的机制,方便不同的前端设备与后端进行通信。这导致API构架的流行,甚至出现"APIFirst"的设计思想...

    RESTful发展背景及简介

    网络应用程序,分为前端和后端两个部分。当前的发展趋势,就是前端设备层出不穷(手机、平板、桌面电脑、其他专用设备…)。因此,必须有一种统一的机制,方便不同的前端设备与后端进行通信。这导致API构架的流行,甚至出现"APIFirst"的设计思想。RESTful API是目前比较成熟的一套互联网应用程序的API设计理论。

    REST(Representational State Transfer)表述性状态转换,REST指的是一组架构约束条件和原则。 如果一个架构符合REST的约束条件和原则,我们就称它为RESTful架构。REST本身并没有创造新的技术、组件或服务,而隐藏在RESTful背后的理念就是使用Web的现有特征和能力, 更好地使用现有Web标准中的一些准则和约束。虽然REST本身受Web技术的影响很深, 但是理论上REST架构风格并不是绑定在HTTP上,只不过目前HTTP是唯一与REST相关的实例。

    1. URI

    URI 表示资源,资源一般对应服务器端领域模型中的实体类。

    URI规范

    不用大写;
    用中杠-不用下杠_;
    参数列表要encode;
    URI中的名词表示资源集合,使用复数形式。

    资源集合 vs 单个资源

    URI表示资源的两种方式:资源集合、单个资源。

    资源集合:

    /zoos //所有动物园
    /zoos/1/animals //id为1的动物园中的所有动物
    

    单个资源:

    /zoos/1 //id为1的动物园
    /zoos/1;2;3 //id为1,2,3的动物园
    

    避免层级过深的URI

    /在url中表达层级,用于按实体关联关系进行对象导航,一般根据id导航。

    过深的导航容易导致url膨胀,不易维护,如 GET /zoos/1/areas/3/animals/4,尽量使用查询参数代替路径中的实体导航,如GET /animals?zoo=1&area=3;

    对Composite资源的访问

    服务器端的组合实体必须在uri中通过父实体的id导航访问。

    组合实体不是first-class的实体,它的生命周期完全依赖父实体,无法独立存在,在实现上通常是对数据库表中某些列的抽象,不直接对应表,也无id。一个常见的例子是 User — Address,Address是对User表中zipCode/country/city三个字段的简单抽象,无法独立于User存在。必须通过User索引到Address:GET /user/1/addresses

    2. Request

    HTTP方法
    通过标准HTTP方法对资源CRUD:

    GET:查询

    GET /zoos
    GET /zoos/1
    GET /zoos/1/employees
    

    POST:创建单个资源。POST一般向“资源集合”型uri发起

    POST /animals  //新增动物
    POST /zoos/1/employees //为id为1的动物园雇佣员工
    

    PUT:更新单个资源(全量),客户端提供完整的更新后的资源。与之对应的是 PATCH,PATCH 负责部分更新,客户端提供要更新的那些字段。PUT/PATCH一般向“单个资源”型uri发起

    PUT /animals/1
    PUT /zoos/1
    

    DELETE:删除

    DELETE /zoos/1/employees/2
    DELETE /zoos/1/employees/2;4;5
    DELETE /zoos/1/animals  //删除id为1的动物园内的所有动物
    

    HEAD / OPTION 用的不多,就不多解释了。

    安全性和幂等性

    1. 安全性:不会改变资源状态,可以理解为只读的;
    2. 幂等性:执行1次和执行N次,对资源状态改变的效果是等价的。
    .安全性幂等性
    GET
    POST××
    PUT×
    DELETE×

    安全性和幂等性均不保证反复请求能拿到相同的response。以 DELETE 为例,第一次DELETE返回200表示删除成功,第二次返回404提示资源不存在,这是允许的。

    复杂查询

    查询可以捎带以下参数:

    .示例备注
    过滤条件?type=1&age=16允许一定的uri冗余,如/zoos/1/zoos?id=1
    排序?sort=age,desc 
    投影?whitelist=id,name,email 
    分页?limit=10&offset=3 

    Bookmarker

    经常使用的、复杂的查询标签化,降低维护成本。

    如:

    GET /trades?status=closed&sort=created,desc
    

    快捷方式:

    GET /trades#recently-closed
    或者
    GET /trades/recently-closed
    

    Format

    只用以下常见的3种body format:

    1.Content-Type: application/json

    POST /v1/animal HTTP/1.1
    Host: api.example.org
    Accept: application/json
    Content-Type: application/json
    Content-Length: 24
     
    {   
      "name": "Gir",
      "animalType": "12"
    }
    

    2.Content-Type: application/x-www-form-urlencoded (浏览器POST表单用的格式)

    POST /login HTTP/1.1
    Host: example.com
    Content-Length: 31
    Accept: text/html
    Content-Type: application/x-www-form-urlencoded
     
    username=root&password=Zion0101
    

    Content-Type: multipart/form-data; boundary=—-RANDOM_jDMUxq4Ot5 (表单有文件上传时的格式)

    Content Negotiation

    资源可以有多种表示方式,如json、xml、pdf、excel等等,客户端可以指定自己期望的格式,通常有两种方式:

    1.http header Accept:

    Accept:application/xml;q=0.6,application/atom+xml;q=1.0
    

    q为各项格式的偏好程度

    2.url中加文件后缀:/zoo/1.json

    6. Response

    1. 不要包装: 
      response 的 body 直接就是数据,不要做多余的包装。错误示例:

      1. {
      2. "success":true,
      3. "data":{"id":1,"name":"xiaotuan"},
      4. }
    2. 各HTTP方法成功处理后的数据格式:

      ·response 格式
      GET单个对象、集合
      POST新增成功的对象
      PUT/PATCH更新成功的对象
      DELETE
    3. json格式的约定:

      1. 时间用长整形(毫秒数),客户端自己按需解析(moment.js
      2. 不传null字段

    分页response

    {
        "paging":{"limit":10,"offset":0,"total":729},
        "data":[{},{},{}...]
    }
    

    7. 错误处理

    1. 不要发生了错误但给2xx响应,客户端可能会缓存成功的http请求;
    2. 正确设置http状态码,不要自定义;
    3. Response body 提供 1) 错误的代码(日志/问题追查);2) 错误的描述文本(展示给用户)。

    对第三点的实现稍微多说一点:

    Java 服务器端一般用异常表示 RESTful API 的错误。API 可能抛出两类异常:业务异常和非业务异常。业务异常由自己的业务代码抛出,表示一个用例的前置条件不满足、业务规则冲突等,比如参数校验不通过、权限校验失败。非业务类异常表示不在预期内的问题,通常由类库、框架抛出,或由于自己的代码逻辑错误导致,比如数据库连接失败、空指针异常、除0错误等等。

    业务类异常必须提供2种信息:

    1. 如果抛出该类异常,HTTP 响应状态码应该设成什么;
    2. 异常的文本描述;

    在Controller层使用统一的异常拦截器:

    1. 设置 HTTP 响应状态码:对业务类异常,用它指定的 HTTP code;对非业务类异常,统一500;
    2. Response Body 的错误码:异常类名
    3. Response Body 的错误描述:对业务类异常,用它指定的错误文本;对非业务类异常,线上可以统一文案如“服务器端错误,请稍后再试”,开发或测试环境中用异常的 stacktrace,服务器端提供该行为的开关。

    常用的http状态码及使用场景:

    状态码使用场景
    400 bad request常用在参数校验
    401 unauthorized未经验证的用户,常见于未登录。如果经过验证后依然没权限,应该 403(即 authentication 和 authorization 的区别)。
    403 forbidden无权限
    404 not found资源不存在
    500 internal server error非业务类异常
    503 service unavaliable由容器抛出,自己的代码不要抛这个异常

    8. 服务型资源

    除了资源简单的CRUD,服务器端经常还会提供其他服务,这些服务无法直接用上面提到的URI映射。如:

    按关键字搜索;
    1.计算地球上两点间的距离;
    2.批量向用户推送消息
    3.可以把这些服务看成资源,计算的结果是资源的presentation,按服务属性选择合适的HTTP方法。

    例:

    GET /search?q=filter?category=file  搜索
    GET /distance-calc?lats=47.480&lngs=-122.389&late=37.108&lnge=-122.448
    POST /batch-publish-msg
    [{"from":0,"to":1,"text":"abc"},{},{}...]
    

    9. 异步任务

    对耗时的异步任务,服务器端接受客户端传递的参数后,应返回创建成功的任务资源,其中包含了任务的执行状态。客户端可以轮训该任务获得最新的执行进度。

    提交任务:
    POST /batch-publish-msg
    [{"from":0,"to":1,"text":"abc"},{},{}...]
     
    返回:
    {"taskId":3,"createBy":"Anonymous","status":"running"}
     
    GET /task/3
    {"taskId":3,"createBy":"Anonymous","status":"success"}
    

    如果任务的执行状态包括较多信息,可以把“执行状态”抽象成组合资源,客户端查询该状态资源了解任务的执行情况。

    提交任务:
    POST /batch-publish-msg
    [{"from":0,"to":1,"text":"abc"},{},{}...]
     
    返回:
    {"taskId":3,"createBy":"Anonymous"}
     
    GET /task/3/status
    {"progress":"50%","total":18,"success":8,"fail":1}
    

    10. API的演进

    版本
    常见的三种方式:

    1.在uri中放版本信息:GET /v1/users/1
    2.Accept Header:Accept: application/json+v1
    3.自定义 Header:X-Api-Version: 1
    用第一种,虽然没有那么优雅,但最明显最方便。

    URI失效
    随着系统发展,总有一些API失效或者迁移,对失效的API,返回404 not found 或 410 gone;对迁移的API,返回 301 重定向。

    展开全文
  • 音频参考标准 ------------------------------------------------------17 音频测试内容 ------------------------------------------------------18 音频设计流程 -----------------------------------------------...
  • 作为一个UI设计,想要自己的页面符合使用习惯,符合标准这些你必须知道,手机图标ui设计尺寸:ui设计app图标尺寸规范如果还有不知道的,快来和庞姿姿一起背!背不下来就收藏,用的时候拿出来看看~ 原型设计尺寸 1、...

    手机图标ui设计尺寸:ui设计app图标尺寸规范你都了解了吗?作为一个UI设计,想要自己的页面符合使用习惯,符合标准这些你必须知道,手机图标ui设计尺寸:ui设计app图标尺寸规范如果还有不知道的,快来和庞姿姿一起背!背不下来就收藏,用的时候拿出来看看~
    在这里插入图片描述

    原型设计尺寸

    1、 iPhone6的界面布局是:屏幕是4.7英寸的,设计稿的大小为375x667px

    ☆ 状态栏(status bar):就是电量条,其高度为:20px;

    ☆ 导航栏(navigation):就是顶部导航,有线其高度为:45px;没有线高度就是44px;

    ☆ 主菜单栏(submenu,tab):就是标签栏,底部导航,其高度为:46px;

    2、状态栏每一项尺寸

    ☆ 信号格:5*5

    ☆wifi图片:11*9

    ☆ 锁:11*11

    ☆ 导航:8*8

    ☆ 电量:22*9

    ☆ 闪电:5*8

    ☆ 状态栏中的文字:10px

    3、关于iPhone6的图标的尺寸:

    ☆ 顶部导航栏的图标尺寸为16x16px左右,底部标签栏的图标尺寸为23 x 23px左右。

    4、关于iPhone6的文字的尺寸:

    ☆ 导航栏的文字大小最大值是14px,底部标签栏的图标下方的文字大小为10px。

    ☆ 内容区域的文字大小是:10px, 12px,14px,16px。

    5、关于颜色

    ① 文字黑色:#282828

    ② 文字深灰色:#656565

    ③ 文字浅灰色:#989898

    ④ 边框浅灰色:#C3C3C3

    ⑤ 背景淡灰色:#f2f2f2

    ⑥ 按钮背景纯白色:#ffffff

    6、在iPhone6设计稿中,界面元素之间的常用距离,亲密距离:10px;疏远距离:15px。

    A、疏远距离:比如,所有元素距离手机屏幕最左边的距离。

    B、亲密距离:比如,左边图标与右边文字之间的距离。

    【综上所述】iPhone6的原型规范如下:

    1、iPhone6手机模型尺寸:429x881px

    2、界面尺寸布局:满屏尺寸375x667px

    3、高度电量条高度20px,导航栏高度44px,标签栏高度46px;

    4、各区域图标大小导航栏图标16px,底部标签栏图标23px;

    5、各区域文字大小电量条-文字10px,导航栏-文字14px,标签栏-文字10px;

    6、常用的文字大小:16px,14px,12px,10px;

    7、常用的颜色:背景浅灰色:#f2f2f2, 文字深黑色: #323232,边框色深灰:#CCCCCC;

    8、常用可点击区域的高度(比如搜索区域):28px;

    9、单行文字的背景框的高度:44px,双行则为:88px,三行则为:132px;

    10、常用间距:亲密距离:10px;疏远距离:15px,其它距离:5px,22px等;
    在这里插入图片描述

    相信通过以上内容,大家已经对手机图标ui设计尺寸:ui设计app图标尺寸规范有了初步的答案。有什么问题可以随时留言评论,看见就会回复。了解更多关于UI设计学习方法、小技巧以及行业相关信息,可以关注我,我非常愿意为新手小白分享从事UI设计5年来的一些经验和感受。

    展开全文
  • 当前的发展趋势,就是前端设备层出不穷(手机、平板、桌面电脑、其他专用设备…)。因此,必须有一种统一的机制,方便不同的前端设备与后端进行通信。这导致API构架的流行,甚至出现"APIFirst"的设计思想。RESTful ...

    RESTful发展背景及简介

    网络应用程序,分为前端和后端两个部分。当前的发展趋势,就是前端设备层出不穷(手机、平板、桌面电脑、其他专用设备…)。因此,必须有一种统一的机制,方便不同的前端设备与后端进行通信。这导致API构架的流行,甚至出现"APIFirst"的设计思想。RESTful API是目前比较成熟的一套互联网应用程序的API设计理论。

    REST(Representational State Transfer)表述性状态转换,REST指的是一组架构约束条件和原则。 如果一个架构符合REST的约束条件和原则,我们就称它为RESTful架构。REST本身并没有创造新的技术、组件或服务,而隐藏在RESTful背后的理念就是使用Web的现有特征和能力, 更好地使用现有Web标准中的一些准则和约束。虽然REST本身受Web技术的影响很深, 但是理论上REST架构风格并不是绑定在HTTP上,只不过目前HTTP是唯一与REST相关的实例。

    1. URI

    URI 表示资源,资源一般对应服务器端领域模型中的实体类。

    URI规范

    不用大写;
    用中杠-不用下杠_;
    参数列表要encode;
    URI中的名词表示资源集合,使用复数形式。

    资源集合 vs 单个资源

    URI表示资源的两种方式:资源集合、单个资源。

    资源集合:

    /zoos //所有动物园
    /zoos/1/animals //id为1的动物园中的所有动物
    

    单个资源:

    /zoos/1 //id为1的动物园
    /zoos/1;2;3 //id为1,2,3的动物园
    

    避免层级过深的URI

    /在url中表达层级,用于按实体关联关系进行对象导航,一般根据id导航。

    过深的导航容易导致url膨胀,不易维护,如 GET /zoos/1/areas/3/animals/4,尽量使用查询参数代替路径中的实体导航,如GET /animals?zoo=1&area=3;

    对Composite资源的访问

    服务器端的组合实体必须在uri中通过父实体的id导航访问。

    组合实体不是first-class的实体,它的生命周期完全依赖父实体,无法独立存在,在实现上通常是对数据库表中某些列的抽象,不直接对应表,也无id。一个常见的例子是 User — Address,Address是对User表中zipCode/country/city三个字段的简单抽象,无法独立于User存在。必须通过User索引到Address:GET /user/1/addresses

    2. Request

    HTTP方法
    通过标准HTTP方法对资源CRUD:

    GET:查询

    GET /zoos
    GET /zoos/1
    GET /zoos/1/employees
    

    POST:创建单个资源。POST一般向“资源集合”型uri发起

    POST /animals  //新增动物
    POST /zoos/1/employees //为id为1的动物园雇佣员工
    

    PUT:更新单个资源(全量),客户端提供完整的更新后的资源。与之对应的是 PATCH,PATCH 负责部分更新,客户端提供要更新的那些字段。PUT/PATCH一般向“单个资源”型uri发起

    PUT /animals/1
    PUT /zoos/1
    

    DELETE:删除

    DELETE /zoos/1/employees/2
    DELETE /zoos/1/employees/2;4;5
    DELETE /zoos/1/animals  //删除id为1的动物园内的所有动物
    

    HEAD / OPTION 用的不多,就不多解释了。

    安全性和幂等性

    1. 安全性:不会改变资源状态,可以理解为只读的;
    2. 幂等性:执行1次和执行N次,对资源状态改变的效果是等价的。
    . 安全性 幂等性
    GET
    POST × ×
    PUT ×
    DELETE ×

    安全性和幂等性均不保证反复请求能拿到相同的response。以 DELETE 为例,第一次DELETE返回200表示删除成功,第二次返回404提示资源不存在,这是允许的。

    复杂查询

    查询可以捎带以下参数:

    . 示例 备注
    过滤条件 ?type=1&age=16 允许一定的uri冗余,如/zoos/1/zoos?id=1
    排序 ?sort=age,desc  
    投影 ?whitelist=id,name,email  
    分页 ?limit=10&offset=3  

    Bookmarker

    经常使用的、复杂的查询标签化,降低维护成本。

    如:

    GET /trades?status=closed&sort=created,desc
    

     

    快捷方式:

    GET /trades#recently-closed
    或者
    GET /trades/recently-closed
    

    Format

    只用以下常见的3种body format:

    1.Content-Type: application/json

    POST /v1/animal HTTP/1.1
    Host: api.example.org
    Accept: application/json
    Content-Type: application/json
    Content-Length: 24
     
    {   
      "name": "Gir",
      "animalType": "12"
    }
    

    2.Content-Type: application/x-www-form-urlencoded (浏览器POST表单用的格式)

    POST /login HTTP/1.1
    Host: example.com
    Content-Length: 31
    Accept: text/html
    Content-Type: application/x-www-form-urlencoded
     
    username=root&password=Zion0101
    

    3.Content-Type: multipart/form-data; boundary=—-RANDOM_jDMUxq4Ot5 (表单有文件上传时的格式)

    Content Negotiation

    资源可以有多种表示方式,如json、xml、pdf、excel等等,客户端可以指定自己期望的格式,通常有两种方式:

    1.http header Accept:

    Accept:application/xml;q=0.6,application/atom+xml;q=1.0
    

    q为各项格式的偏好程度

    2.url中加文件后缀:/zoo/1.json

    6. Response

    1. 不要包装: 
      response 的 body 直接就是数据,不要做多余的包装。错误示例:

      
       
      1. {

      2. "success": true,

      3. "data":{ "id": 1, "name": "xiaotuan"},

      4. }

      • 1
    2. 各HTTP方法成功处理后的数据格式:

      · response 格式
      GET 单个对象、集合
      POST 新增成功的对象
      PUT/PATCH 更新成功的对象
      DELETE
    3. json格式的约定:

      1. 时间用长整形(毫秒数),客户端自己按需解析(moment.js
      2. 不传null字段

    分页response

    {
        "paging":{"limit":10,"offset":0,"total":729},
        "data":[{},{},{}...]
    }
    

    7. 错误处理

    1. 不要发生了错误但给2xx响应,客户端可能会缓存成功的http请求;
    2. 正确设置http状态码,不要自定义;
    3. Response body 提供 1) 错误的代码(日志/问题追查);2) 错误的描述文本(展示给用户)。

    对第三点的实现稍微多说一点:

    Java 服务器端一般用异常表示 RESTful API 的错误。API 可能抛出两类异常:业务异常和非业务异常。业务异常由自己的业务代码抛出,表示一个用例的前置条件不满足、业务规则冲突等,比如参数校验不通过、权限校验失败。非业务类异常表示不在预期内的问题,通常由类库、框架抛出,或由于自己的代码逻辑错误导致,比如数据库连接失败、空指针异常、除0错误等等。

    业务类异常必须提供2种信息:

    1. 如果抛出该类异常,HTTP 响应状态码应该设成什么;
    2. 异常的文本描述;

    在Controller层使用统一的异常拦截器:

    1. 设置 HTTP 响应状态码:对业务类异常,用它指定的 HTTP code;对非业务类异常,统一500;
    2. Response Body 的错误码:异常类名
    3. Response Body 的错误描述:对业务类异常,用它指定的错误文本;对非业务类异常,线上可以统一文案如“服务器端错误,请稍后再试”,开发或测试环境中用异常的 stacktrace,服务器端提供该行为的开关。

    常用的http状态码及使用场景:

    状态码 使用场景
    400 bad request 常用在参数校验
    401 unauthorized 未经验证的用户,常见于未登录。如果经过验证后依然没权限,应该 403(即 authentication 和 authorization 的区别)。
    403 forbidden 无权限
    404 not found 资源不存在
    500 internal server error 非业务类异常
    503 service unavaliable 由容器抛出,自己的代码不要抛这个异常

    8. 服务型资源

    除了资源简单的CRUD,服务器端经常还会提供其他服务,这些服务无法直接用上面提到的URI映射。如:

    按关键字搜索;
    1.计算地球上两点间的距离;
    2.批量向用户推送消息
    3.可以把这些服务看成资源,计算的结果是资源的presentation,按服务属性选择合适的HTTP方法。

    例:

    GET /search?q=filter?category=file  搜索
    GET /distance-calc?lats=47.480&lngs=-122.389&late=37.108&lnge=-122.448
    POST /batch-publish-msg
    [{"from":0,"to":1,"text":"abc"},{},{}...]
    

    9. 异步任务

    对耗时的异步任务,服务器端接受客户端传递的参数后,应返回创建成功的任务资源,其中包含了任务的执行状态。客户端可以轮训该任务获得最新的执行进度。

    提交任务:
    POST /batch-publish-msg
    [{"from":0,"to":1,"text":"abc"},{},{}...]
     
    返回:
    {"taskId":3,"createBy":"Anonymous","status":"running"}
     
    GET /task/3
    {"taskId":3,"createBy":"Anonymous","status":"success"}
    

    如果任务的执行状态包括较多信息,可以把“执行状态”抽象成组合资源,客户端查询该状态资源了解任务的执行情况。

    提交任务:
    POST /batch-publish-msg
    [{"from":0,"to":1,"text":"abc"},{},{}...]
     
    返回:
    {"taskId":3,"createBy":"Anonymous"}
     
    GET /task/3/status
    {"progress":"50%","total":18,"success":8,"fail":1}
    

    10. API的演进

    版本
    常见的三种方式:

    1.在uri中放版本信息:GET /v1/users/1
    2.Accept Header:Accept: application/json+v1
    3.自定义 Header:X-Api-Version: 1
    用第一种,虽然没有那么优雅,但最明显最方便。

    URI失效
    随着系统发展,总有一些API失效或者迁移,对失效的API,返回404 not found 或 410 gone;对迁移的API,返回 301 重定向。

    展开全文
  • RESTful API接口设计标准规范(一)

    千次阅读 2019-05-06 18:18:30
    当前的发展趋势,就是前端设备层出不穷(手机、平板、桌面电脑、其他专用设备…)。因此,必须有一种统一的机制,方便不同的前端设备与后端进行通信。这导致API构架的流行,甚至出现"APIFirst"的设计思想。RESTful ...

    RESTful发展背景及简介


    网络应用程序,分为前端和后端两个部分。当前的发展趋势,就是前端设备层出不穷(手机、平板、桌面电脑、其他专用设备…)。因此,必须有一种统一的机制,方便不同的前端设备与后端进行通信。这导致API构架的流行,甚至出现"APIFirst"的设计思想。RESTful API是目前比较成熟的一套互联网应用程序的API设计理论。

    REST(Representational State Transfer)表述性状态转换,REST指的是一组架构约束条件和原则。 如果一个架构符合REST的约束条件和原则,我们就称它为RESTful架构。REST本身并没有创造新的技术、组件或服务,而隐藏在RESTful背后的理念就是使用Web的现有特征和能力, 更好地使用现有Web标准中的一些准则和约束。虽然REST本身受Web技术的影响很深, 但是理论上REST架构风格并不是绑定在HTTP上,只不过目前HTTP是唯一与REST相关的实例。

    1. URI
    URI 表示资源,资源一般对应服务器端领域模型中的实体类。

    URI规范
    不用大写;
    用中杠-不用下杠_;
    参数列表要encode;
    URI中的名词表示资源集合,使用复数形式。

    资源集合 vs 单个资源
    URI表示资源的两种方式:资源集合、单个资源。

    资源集合:

    /zoos //所有动物园
    /zoos/1/animals //id为1的动物园中的所有动物


    单个资源:

    /zoos/1 //id为1的动物园
    /zoos/1;2;3 //id为1,2,3的动物园


    避免层级过深的URI


    /在url中表达层级,用于按实体关联关系进行对象导航,一般根据id导航。

    过深的导航容易导致url膨胀,不易维护,如 GET /zoos/1/areas/3/animals/4,尽量使用查询参数代替路径中的实体导航,如GET /animals?zoo=1&area=3;

    对Composite资源的访问
    服务器端的组合实体必须在uri中通过父实体的id导航访问。

    组合实体不是first-class的实体,它的生命周期完全依赖父实体,无法独立存在,在实现上通常是对数据库表中某些列的抽象,不直接对应表,也无id。一个常见的例子是 User — Address,Address是对User表中zipCode/country/city三个字段的简单抽象,无法独立于User存在。必须通过User索引到Address:GET /user/1/addresses

    2. Request


    HTTP方法
    通过标准HTTP方法对资源CRUD:

    GET:查询

    GET /zoos
    GET /zoos/1
    GET /zoos/1/employees



    POST:创建单个资源。POST一般向“资源集合”型uri发起

     

    POST /animals  //新增动物
    POST /zoos/1/employees //为id为1的动物园雇佣员工


    PUT:更新单个资源(全量),客户端提供完整的更新后的资源。与之对应的是 PATCH,PATCH 负责部分更新,客户端提供要更新的那些字段。PUT/PATCH一般向“单个资源”型uri发起

    PUT /animals/1
    PUT /zoos/1

    DELETE:删除

    DELETE /zoos/1/employees/2
    DELETE /zoos/1/employees/2;4;5
    DELETE /zoos/1/animals  //删除id为1的动物园内的所有动物


    HEAD / OPTION 用的不多,就不多解释了。

    安全性和幂等性


    安全性:不会改变资源状态,可以理解为只读的;
    幂等性:执行1次和执行N次,对资源状态改变的效果是等价的。

     

    . 安全性 幂等性
    GET
    POST × ×
    PUT ×
    DELETE ×


    安全性和幂等性均不保证反复请求能拿到相同的response。以 DELETE 为例,第一次DELETE返回200表示删除成功,第二次返回404提示资源不存在,这是允许的。

    复杂查询


    查询可以捎带以下参数:

    .    示例    备注
    过滤条件    ?type=1&age=16    允许一定的uri冗余,如/zoos/1与/zoos?id=1
    排序    ?sort=age,desc     
    投影    ?whitelist=id,name,email     
    分页    ?limit=10&offset=3     
    Bookmarker
    经常使用的、复杂的查询标签化,降低维护成本。

    如:

    GET /trades?status=closed&sort=created,desc
    1
    快捷方式:

    GET /trades#recently-closed
    或者
    GET /trades/recently-closed



    Format

     


    只用以下常见的3种body format:

    1.Content-Type: application/json

    POST /v1/animal HTTP/1.1
    Host: api.example.org
    Accept: application/json
    Content-Type: application/json
    Content-Length: 24
     
    {   
      "name": "Gir",
      "animalType": "12"
    }

    2.Content-Type: application/x-www-form-urlencoded (浏览器POST表单用的格式)

    POST /login HTTP/1.1
    Host: example.com
    Content-Length: 31
    Accept: text/html
    Content-Type: application/x-www-form-urlencoded
     
    username=root&password=Zion0101

    Content-Type: multipart/form-data; boundary=—-RANDOM_jDMUxq4Ot5 (表单有文件上传时的格式)

    Content Negotiation
    资源可以有多种表示方式,如json、xml、pdf、excel等等,客户端可以指定自己期望的格式,通常有两种方式:

    1.http header Accept:

    Accept:application/xml;q=0.6,application/atom+xml;q=1.0
    1
    q为各项格式的偏好程度

    2.url中加文件后缀:/zoo/1.json

    6. Response


    不要包装: 
    response 的 body 直接就是数据,不要做多余的包装。错误示例:

    {
        "success":true,
        "data":{"id":1,"name":"xiaotuan"},
    }
    1
    各HTTP方法成功处理后的数据格式:

    ·    response 格式
    GET    单个对象、集合
    POST    新增成功的对象
    PUT/PATCH    更新成功的对象
    DELETE    空
    json格式的约定:

    时间用长整形(毫秒数),客户端自己按需解析(moment.js)
    不传null字段
    分页response
    {
        "paging":{"limit":10,"offset":0,"total":729},
        "data":[{},{},{}...]
    }


    7. 错误处理


    不要发生了错误但给2xx响应,客户端可能会缓存成功的http请求;
    正确设置http状态码,不要自定义;
    Response body 提供 1) 错误的代码(日志/问题追查);2) 错误的描述文本(展示给用户)。
    对第三点的实现稍微多说一点:

    Java 服务器端一般用异常表示 RESTful API 的错误。API 可能抛出两类异常:业务异常和非业务异常。业务异常由自己的业务代码抛出,表示一个用例的前置条件不满足、业务规则冲突等,比如参数校验不通过、权限校验失败。非业务类异常表示不在预期内的问题,通常由类库、框架抛出,或由于自己的代码逻辑错误导致,比如数据库连接失败、空指针异常、除0错误等等。

    业务类异常必须提供2种信息:

    如果抛出该类异常,HTTP 响应状态码应该设成什么;
    异常的文本描述;
    在Controller层使用统一的异常拦截器:

    设置 HTTP 响应状态码:对业务类异常,用它指定的 HTTP code;对非业务类异常,统一500;
    Response Body 的错误码:异常类名
    Response Body 的错误描述:对业务类异常,用它指定的错误文本;对非业务类异常,线上可以统一文案如“服务器端错误,请稍后再试”,开发或测试环境中用异常的 stacktrace,服务器端提供该行为的开关。
    常用的http状态码及使用场景:

    状态码    使用场景
    400 bad request    常用在参数校验
    401 unauthorized    未经验证的用户,常见于未登录。如果经过验证后依然没权限,应该 403(即 authentication 和 authorization 的区别)。
    403 forbidden    无权限
    404 not found    资源不存在
    500 internal server error    非业务类异常
    503 service unavaliable    由容器抛出,自己的代码不要抛这个异常


    8. 服务型资源


    除了资源简单的CRUD,服务器端经常还会提供其他服务,这些服务无法直接用上面提到的URI映射。如:

    按关键字搜索;
    1.计算地球上两点间的距离;
    2.批量向用户推送消息
    3.可以把这些服务看成资源,计算的结果是资源的presentation,按服务属性选择合适的HTTP方法。

    例:

    GET /search?q=filter?category=file  搜索
    GET /distance-calc?lats=47.480&lngs=-122.389&late=37.108&lnge=-122.448
    POST /batch-publish-msg
    [{"from":0,"to":1,"text":"abc"},{},{}...]

    9. 异步任务


    对耗时的异步任务,服务器端接受客户端传递的参数后,应返回创建成功的任务资源,其中包含了任务的执行状态。客户端可以轮训该任务获得最新的执行进度。

    提交任务:
    POST /batch-publish-msg
    [{"from":0,"to":1,"text":"abc"},{},{}...]
     
    返回:
    {"taskId":3,"createBy":"Anonymous","status":"running"}
     
    GET /task/3
    {"taskId":3,"createBy":"Anonymous","status":"success"}

    如果任务的执行状态包括较多信息,可以把“执行状态”抽象成组合资源,客户端查询该状态资源了解任务的执行情况。

    提交任务:
    POST /batch-publish-msg
    [{"from":0,"to":1,"text":"abc"},{},{}...]
     
    返回:
    {"taskId":3,"createBy":"Anonymous"}
     
    GET /task/3/status
    {"progress":"50%","total":18,"success":8,"fail":1}


    10. API的演进


    版本
    常见的三种方式:

    1.在uri中放版本信息:GET /v1/users/1
    2.Accept Header:Accept: application/json+v1
    3.自定义 Header:X-Api-Version: 1
    用第一种,虽然没有那么优雅,但最明显最方便。

    URI失效
    随着系统发展,总有一些API失效或者迁移,对失效的API,返回404 not found 或 410 gone;对迁移的API,返回 301 重定向。
    --------------------- 
    作者:时光偏执 
    来源:CSDN 
    原文:https://blog.csdn.net/qq_41606973/article/details/86352787 
    版权声明:本文为博主原创文章,转载请附上博文链接!

    展开全文
  • 循序渐进,深入浅出,全篇干货,系统化的讲解UI手机移动端交互界面设计的特点、技术实现方法及应用场景,以及通过逐个交互界面及icon案例绘制方法实操,结合移动端的用户交互使用规范,以及相关的技术实现方法手把手...
  • Android的界面设计规范

    2021-03-02 09:01:23
    Android有百万计的手机、平板电脑和其他设备,这些设备都有各种屏幕尺寸。...一种方法是先设计标准设备的(正常大小和MDPI),然后设计向上和向下比例的尺寸。另一种方法是从最大屏幕尺寸的开始,然后缩减,并
  • 相信很多人都在开发设计APP时会遇到很多界面上的问题,要以多大尺寸来设计?分辨率是多少?该怎么切图给开发......这些问题的确让人头疼,现在将关于iOS的尺寸...更多UI 设计规范到 搜UI (SOOUI) 网,对初学者特别有...
  • 接口设计规范及测试

    2019-09-25 11:15:27
    RESTful API设计规范 为什么会有RESTFUL API 前端设备层出不穷(手机、平板、桌面电脑、其他专用设备……),促使前后端分离,方便不同的前端设备与后端进行通信,导致API架构的流行。 RESTful架构,因结构清晰、...
  • UI设计中的一些规范

    2021-01-05 16:18:15
    目录UI设计中的一些规范手机界面设计规范导航栏设计早期的iOS和android的部分参数内部设计苹果安卓标准颜色设计 手机界面设计规范 手机界面部分设计规范 - 状态栏(status bar): 显示手机状态的区域 (iOS-40px)...
  • 标准是以Q/ZX.04.100.2-2002《印制电路板设计规范—工艺性要求》为基础,并根据公司手机产品单板的特点,在内容上做了一些补充和完善,并按照问题的类别对条目进行重新编排而形成的,本标准仅适用于手机产品。
  • web设计常用规范

    2019-09-27 07:53:30
    1、在不同设备上采用相似的设计 用户可以通过不同类型的设备访问你的网站,这些设备包括:电脑、平板、手机、音乐播放器、甚至是智能手表等。无论用户使用什么设备访问你的网页,确保他们具有类似的体验,这是用户...
  • 标准规定了硬件开发部门和PCB设计部门对PCB设计的检查要求。 本标准适用于在CADENCE平台上进行的PCB设计,其它平台可参照执行。 本标准适用于除手机外的产品;对于手机产品,本标准中的检查项目可以适用,但工艺性...
  • 循序渐进,深入浅出,全篇干货,系统化的讲解UI手机移动端交互界面设计的特点、技术实现方法及应用场景,以及通过逐个交互界面及icon案例绘制方法实操,结合移动端的用户交互使用规范,以及相关的技术实现方法手把手...
  • 大家好,我是jacky,很高兴继续跟大家学习MySQL数据分析这门课,上次课我们介绍了E-R图,我们要给手机销售公司设计数据库,那么同一个项目,10个设计人员可能设计出10种不同的E-R图;因为不同的设计人员会从不同的...
  • 移动端H5页面的设计稿尺寸大小规范

    千次阅读 2019-08-03 07:13:45
    那么多手机屏幕尺寸,设计稿应该按照哪一个尺寸作为标准尺寸。现在已经有2K分辨率的手机屏幕了,设计稿是不是也要把宽高跟着最大分辨率来设计。显然不是。 请注意:(以下所有讨论内容和规范均将viewport设定为...
  • 如今,智能手机中以应用为中心的设计已经成为主流趋势,同时这类设计中的外设功能如各种调制解调器已经被卸载到各种独立的芯片组中。导致这种结果的原因有许多,一部分是由于激烈的市场竞争所致,包括那种希望通过...
  • 在CDMA移动台规范标准IS-98C中,要求频率间隔为30kHz,这就使得频率合成器具有很大的分频比,可达30000以上,要满足在分频比很大情况下的带内相位噪声要求就成为需要解决的问题。另外,还要考虑高阶环路的设计、...
  • 针对双界面卡实现手机支付涉及接触式和非接触式两种相异的通信方式,目前尚没有形成关于双界面卡开发的统一标准的问题,通过对SIMpass方案的介绍,以及对双界面卡中用到的ISO/IEC7816和ISO/IEC14443标准的详细分析,...
  • 本毕业设计主要内容是开发一款新型的心灵驿站手机软件。该软件结合人们日常生活情绪的需要,实现日常生活个人生活情绪管理与的基本需要。具体应实现的核心功能需要包括如下。 1.好心情功能:用户可以听音乐、聊天、...
  • 为了应对手机传输高清摄像的挑战,需要在USB标准中定义一个USB音视频类来规范USB视频传输(Video-over-USB)技术。 手机的摄像功能已经从一种新鲜事物发展为主流配置,移动供应商策略性地把高清录像作为他们的高端...
  • 针对双界面卡实现手机支付涉及接触式和非接触式两种相异的通信方式,目前尚没有形成关于双界面卡开发的统一标准的问题,通过对SIMpass方案的介绍,以及对双界面卡中用到的ISO/IEC7816和ISO/IEC14443标准的详细分析,...

空空如也

空空如也

1 2 3 4 5 ... 14
收藏数 264
精华内容 105
关键字:

手机设计规范标准