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

    这才真的标准规范。

  • 要发表评论,您必须先登录