Http请求及返回状态规范
根据FHIR中 api中对于http 请求状态需求,特制定以下http访问规范。参考资料:http://hl7.org/fhir/http.html
常用的http 状态码(StatusCodes)
StatusCodes | 说明 | 标识(常量) |
200 | 服务器已成功处理了请求 | OK |
201 | (已创建) 请求成功且服务器已创建了新的资源。 | OK_ResourceCreated |
204 | 服务器成功处理了请求,但没有返回任何内容。 | OK_NoContent |
304 | (未修改) 自从上次请求后,请求的资源未被修改过。服务器返回此响应时,不会返回网页内容。 | NotModified |
400 | (错误请求) 服务器不理解请求的语法。 | Err |
401 | (未授权) 请求要求进行身份验证。登录后,服务器可能会返回对页面的此响应。 | Err_NoAuthorization |
404 | (未找到) 服务器找不到请求的资源 | Err_NoResource |
405 | (方法禁用) 禁用请求中所指定的方法。 | Err_MethodProhibited |
409 | (冲突) 服务器在完成请求时发生冲突。服务器必须包含有关响应中所发生的冲突的信息。服务器在响应与前一个请求相冲突的 PUT 请求时可能会返回此代码,同时会提供两个请求的差异列表。 | Err_Conflict |
410 | (已删除) 如果请求的资源已被永久删除,那么,服务器会返回此响应。该代码与 404(未找到)代码类似,但在资源以前有但现在已经不复存在的情况下,有时会替代 404 代码出现。如果资源已被永久删除,那么,您应当使用 301 代码指定该资源的新位置。 | Err_ResourceDeleted |
412 | (未满足前提条件) 服务器未满足请求者在请求中设置的其中一个前提条件。 | Err_UnsatisfiedConditions |
422 | 请求格式正确,但是由于含有语义错误,无法响应。(RFC 4918 WebDAV)423 Locked 当前资源被锁定。(RFC 4918 WebDAV) | Err_Syntax |
每个资源都有一组相关的资源元数据元素,这些映射到HTTP请求和响应使用以下字段:
元数据项 | HTTP位置 |
LogicalID | 该ID在URL中有明确表示 |
Meta.VersionId | 版本号在 ETag 头信息中体现 |
Lastmodified(.meta.lastUpdated) | HTTP Last-Modified (Header)头信息 |
例如:ETag: 123456meta.lastUpdated 精确到毫秒。用户本地加密数据缓存表(dataCache)
字段名 | 类型 | |
UserID | String(32) | 用户ID |
Uri | String(6000) | Uri路径 |
fileName | String(200) | 文件名 |
contentType | String(20) | 内容类别 |
encrypted | bool | 加密的 |
Content | Binary(10M) | 内容 |
lastUpdate | datetime | 最后更新时间 |
lastAccess | datetime | 最后访问时间 |
CreatedTime | datetime | 创建时间 |
expireddate | datetime | 失效日期 |
注意:失效的数据会被即时删除If-Modified-Since, If-None-Match 本来是用于网页防刷新缓存技术,为了兼容这项技术,我公司开发的平台将支持这项技术。http响应头将包含 etag和last-modified信息,鼓励客户端软件的开发利用这项技术,最大限度的把重复访问的数据缓存在本地。尽量降低重复访问对带宽的负载,可以提升客户端获取数据的速度。这些交互是使用POST,PUT和PATCH来完成的,服务器仅返回状态代码是可以的,或者返回创建或更新后的整个结果资源(可能与客户端提交的不同)。在事务处理的情况下,将返回一个带有很多 (entry)实例的数据集合(Budle.entry.reponse),而不是Bundle.entry.response值。客户端可以使用 HTTP返回首选项 ( HTTP return preference )表明是否返回整个资源:
Prefer: return=minimal
Prefer: return=representation
Prefer: return=OperationOutcome
第一个要求不返回数据体(body)。
第二个要求返回完整的资源。第三个请求服务器返回一个OperationOutcome 资源,其中包含有关操作的提示和警告,而不是完整的资源。服务器应该尊重这个请求头。在没有这个标题头的情况下,服务器可以选择是否返回完整资源(但不是OperationOutcome;只有在明确请求时才应该返回)。请注意,此设置仅适用于成功的交互。在出现故障的情况下,服务器应始终返回包含OperationOutcome资源的正文。
交互 |
路径 | 请求 | ||||
动词 | 内容类别 | 数据体 | 首选项 | 条件 | ||
read | /[type]/[id] | get | N/A | N/A | N/A | O: If-Modified-Since, If-None-Match |
vread | /[type]/[id]/_history/[vid] | get | N/A | N/A | N/A | N/A |
update |
/[type]/[id] /[type]?[conditon] |
put | R | Resource | O | O: If-Match |
Patch | /[type]/[id] | Patch | R | Resource | O | O: If-Match |
delete |
/[type]/[id] /[type]?[conditio] |
delete | N/A | N/A | N/A | N/A |
create | /[type] | post | R | Resource | O | O: If-None-Exist(condition) |
search | /[type]? | get | N/A | N/A | N/A | N/A |
transaction | / | post | R | buddle | O | N/A |
history | /[type]/[id]/_history | get | N/A | N/A | N/A | N/A |
history-type | /[type]/_history | get | N/A | N/A | N/A | N/A |
(operation) | /$[name], /[type]/$[name] or /[type]/[id]/$[name] | post | R | Parameters | N/A | N/A |
N/A =不存在,R =必需,O =可选
update/delete:支持条件,但不是批量操作,只能单资源操作。
交互 | 响应 | ||||
内容类别 | 数据体 | 位置 | 版本控制 | 状态码 | |
read | R | R: Resource | N/A | R: ETag, Last-Modified | 401,200, 304,404, 410 |
vread | R | R: Resource | N/A | R: ETag, Last-Modified | 401,200, 404,410 |
update | R if body | O: Resource (Prefer) | R on create | R: ETag, Last-Modified | 401,200, 201, 400, 404, 405, 409, 412, 422 |
Patch | R if body | O: Resource (Prefer) | R on create | R: ETag, Last-Modified | 401,200, 201, 400, 404, 405, 409, 412, 422 |
delete | R if body | O: OperationOutcome | N/A | N/A | 401,200, 204, 404, 405, 409, 412 |
create | R if body | O : Resource (Prefer) | R | R: ETag, Last-Modified | 401,201, 400, 404, 405, 422 |
search | R: Bundle | N/A | N/A | 200, 401? | |
transaction | R: Bundle | N/A | N/A | 401,200, 400, 404, 405, 409, 412, 422 | |
history | R: Bundle | N/A | N/A | 401,200 | |
history-type | R: Bundle | N/A | N/A | 401,200 | |
(operation) | R: Parameters/Resource | N/A | N/A | 401,200 |
评论 (1)
wyp| 2018-06-12
这才真的标准规范。