Skip to content

Latest commit

 

History

History
143 lines (101 loc) · 3.49 KB

SUPPLEMENT.md

File metadata and controls

143 lines (101 loc) · 3.49 KB

补充内容

这里是一些补充性质的内容,在需要实现某些功能时可以做一个参考,不一定有相应的标准可以遵循。

目录

User-Agent

请求头中的 User-Agent 可以帮助服务端收集设备信息,建议格式:

  • iOS

      iOS/iOS版本号 (设备型号; 是否越狱<unjailbroken, jailbroken>; 网络类型<Wi-Fi, Cellular, Unknown>; 语言) CFBundleIdentifier/CFBundleVersion
    
  • Android

      Android/Android版本号 (设备型号; ROM版本号; 是否root<unrooted, rooted>; 网络类型; 语言) PackageName/PackageVersion
    
  • Web 应用的 User-Agent 由浏览器设定

示例:

User-Agent: iOS/6.1.2 (iPhone 5; jailbroken; Wi-Fi; zh-CN) com.bundle.id/3.2

User-Agent: Android/4.2 (MI-ONE Plus; MIUI-2.3.6f; unrooted; GPRS; zh-TW) com.bundle.id/2.1

Android 的网络类型获取可以参考文档:http://developer.android.com/reference/android/telephony/TelephonyManager.html

两步验证

如果只是打算简单实现,建议使用 TOTP(Wikipedia) 协议,可以兼容 Google Authenticator

相关资料:

同时操作多个资源

创建多个相同的资源

请求:

POST /resources HTTP/1.1

[{
  "id": "1 也允许由客户端直接指定 ID ,比如 UUID",
  "name": "resource1",
  "property": "a"
}, {
  "name": "resource2",
  "property": "b"
}, {
  "name": "resource3",
  "property": "c"
}]

响应:

HTTP/1.1 201 Created
Location: /resources/1,2,3

[{
  "id": "1",
  "name": "resource1",
  "property": "a"
}, {
  "id": "2",
  "name": "resource2",
  "property": "b"
}, {
  "id": "3",
  "name": "resource3",
  "property": "c"
}]

删除多个相同的资源

// 请求
DELETE /resources/1,2,3 HTTP/1.1

// 响应
HTTP/1.1 204 No Content

修改多个相同的资源

请求:

PATCH /resources/1,2,3 HTTP/1.1

Content-Type: application/json
{
  "property": "d"
}

// 也可以使用 JSON Patch
Content-Type: application/json-patch+json
{
  "op": "replace",
  "replace": "/property",
  "value": "d"
}

请求实体可以直接写一个 JSON 进行修改,也可以发送一个 JSON Patch 进行修改。

响应:

HTTP/1.1 204 No Content

超文本驱动

想法受启发于 JSON API 方案,很多做法基本照搬,主要是把 links 相关内容放到了请求头里。

想法目前还不成熟,并不建议投入使用。

HTTP/1.1 200 OK
Link: <http://api.example.com/peoples/{posts.author}>; rel="res:author"; allow="collection,get",
      <http://api.example.com/comments/{posts.comments}>; rel="res:comments"; allow="collection,create,get,delete",
      <http://api.example.com/todos/order>; rel="res:order"; allow="get,put"

[{
  "id": "1",
  "title": "Rails is Omakase",
  "author": "9",
  "comments": [ "5", "12", "17", "20" ]
}]