DICOM 一致性声明

Cloud Healthcare API 中的 DICOM 存储区支持 DICOM PS3.18 - Web 服务标准(通常称为 DICOMweb)中指定的一部分 RESTful Web 服务。具体来说,它们支持研究服务和资源(以前称为 WADA-RS、STOW-RS 和 QDO-RS 服务)。

此外,Cloud Healthcare API 还支持用于删除 DICOM 实例的专有 Web 服务。

Cloud Healthcare API 不支持 URI 服务Worklist 服务非患者实例服务或任何功能事务

检索事务

检索事务是用于检索 DICOM 影像数据的 RESTful Web 服务。

“检索事务”功能支持检索以下资源:

  • DICOM 资源:
    • 研究
    • 系列
    • 实例
    • 框架
    • 批量数据
  • 元数据资源
    • 研究
    • 系列
    • 实例
  • 呈现的资源
    • 实例
    • 框架

它不支持缩略图资源。

如需详细了解这些方法的配额和限制,请参阅配额和限制

DICOM 研究/系列/实例

支持以下 Accept 标头:

  • multipart/related; type="application/dicom"; transfer-syntax=1.2.840.10008.1.2.1(默认)
  • multipart/related; type="application/dicom"; transfer-syntax=1.2.840.10008.1.2.4.50
  • multipart/related; type="application/dicom"; transfer-syntax=1.2.840.10008.1.2.4.90
  • multipart/related; type="application/dicom"; transfer-syntax=1.2.840.10008.1.2.4.91
  • multipart/related; type="application/dicom"; transfer-syntax=*

DICOM 实例

为方便起见,除了上述 Accept 标头之外,RetrieveInstance 还支持单个部件的内容类型:

  • application/dicom; transfer-syntax=1.2.840.10008.1.2.1
  • application/dicom; transfer-syntax=1.2.840.10008.1.2.4.50
  • application/dicom; transfer-syntax=1.2.840.10008.1.2.4.90
  • application/dicom; transfer-syntax=1.2.840.10008.1.2.4.91
  • application/dicom; transfer-syntax=*

它不是官方 DICOMweb 标准的一部分。

DICOM 框架

支持以下 Accept 标头:

  • multipart/related; type="application/octet-stream"; transfer-syntax=1.2.840.10008.1.2.1(默认)
  • multipart/related; type="application/octet-stream"; transfer-syntax=*
  • multipart/related; type="image/jpeg"; transfer-syntax=1.2.840.10008.1.2.4.50
  • multipart/related; type="image/png"

* 的传输语法允许用户请求不进行转码,因此将会使用已上传文件的传输语法。对于 application/octet-stream,批量数据将采用其在上传的 DICOM 文件中所显示的格式返回。

呈现的资源

支持以下 Accept 标头:

  • image/jpeg(默认)
  • image/png

仅支持检索实例或框架资源。

不支持任何网址参数。

元数据资源

支持以下 Accept 标头:

  • application/dicom+json(默认)
  • multipart/related; type=application/dicom+xml

RetrieveMetadata 不会返回使用 DICOM 值表示形式来表示 OB、OD、OF、OL、OW 或 UN 的任何属性。

元数据中不会返回任何 BulkDataURI。

元数据资源不会返回包含超过约 1 MiB 数据的 DICOM 序列标记。此限制仅适用于元数据资源。DICOM 资源仍将包含这些标记。

批量数据资源

支持以下 Accept 标头:

  • multipart/related; type="application/octet-stream"; transfer-syntax=1.2.840.10008.1.2.1
  • multipart/related; type="application/octet-stream"; transfer-syntax=*
  • multipart/related; type="image/jpeg"; transfer-syntax=1.2.840.10008.1.2.4.50
  • multipart/related; type="image/png"

仅支持检索 PixelData。

转码支持的传输语法

上面的 Accept 标头介绍了您可以从 API 请求的媒体类型和传输语法,但根据上传的原始文件的传输语法,您不一定能请求。具体而言,只能通过以下传输语法进行转码:

  • 1.2.840.10008.1.2(隐式小端字节序)
  • 1.2.840.10008.1.2.1(显式小端字节序)
  • 1.2.840.10008.1.2.2(显式 VR 大端字节序)
  • 1.2.840.10008.1.2.4.50(JPEG 基准进程 1)
  • 1.2.840.10008.1.2.4.57(JPEG 无损格式)
  • 1.2.840.10008.1.2.4.70(JPEG 无损格式选择值 1)
  • 1.2.840.10008.1.2.4.90(仅限 JPEG 2000 无损格式)
  • 1.2.840.10008.1.2.4.91 (JPEG 2000)
  • 1.2.840.10008.1.2.5(RLE 无损格式)

如果原始文件的传输语法不是上述列表中的语法,而您请求转码为其他格式,则系统会返回错误。

Cloud Healthcare API 无法将位深大于 8 的非单色图像转码为 JPEG。

要停用转码功能并从 API 中检索任何文件,您可以在 Accept 标头中设置 transfer-syntax=*

状态代码

代码 含义
200 (OK) 响应载荷包含所有目标资源的表示形式。
400 (Bad Request) 对指定目标资源(例如缺少像素数据)的请求无效(例如查询参数或标头错误)。
401 (Unauthorized) 请求缺少身份验证凭据。
403 (Permission Denied) 已通过身份验证的用户无权访问此资源(或该资源不存在)。
406 (Not Acceptable) 服务器不支持任何可接受的媒体类型。
429 (Too Many Requests) 客户端超出了其配额
503 (Service Unavailable) 服务器当前不可用或请求已超出其截止日期。

存储事务

存储事务是用于存储 DICOM 影像数据的 RESTful Web 服务。

存储事务可以直接接受第 10 部分 DICOM 二进制文件,也可以接受将 DICOM 文件拆分为元数据(以 JSON 表示)和批量数据。这两个版本具有不同的语义,以下各部分进行了介绍。

如需详细了解此方法的配额和限制,请参阅配额和限制

DICOM 第 10 部分二进制文件

支持的 Content-Type 如下:

  • multipart/related; type=application/dicom
  • application/dicom

服务器不会强制转换或替换属性。

此版本接受所有传输语法类和 SOP 类。提取某些关键元数据属性时,仅对 DICOM 文件进行最小程度的验证。

请注意,为方便起见,“存储事务”还接受内容类型为 application/dicom 的单个 DICOM 实例的单部分 HTTP 请求。它不是官方 DICOMweb 标准的一部分。

有关关联的方法指南,请参阅存储 DICOM 实例

JSON 元数据和批量数据请求

使用 JSON 元数据和批量数据存储实例时,第一个多部分部分必须包含 DICOM 实例的 JSON 数组

第一部分的 Content-Type 必须为 application/dicom+json; transfer-syntax=TransferSyntaxUID,其中 TransferSyntaxUID 是对 InlineBinary 对象中的二进制数据进行编码时所用的传输语法。如果元数据中没有 InlineBinary 对象,则可以省略 transfer-syntax 参数。

JSON 元数据中的每个实例中都必须存在以下 DICOM 元素:

  • SpecificCharacterSet
  • TransferSyntaxUID
  • SOPClassUID
  • StudyInstanceUID
  • SeriesInstanceUID
  • SOPInstanceUID

SpecificCharacterSet 元素必须设置为 ISO_IR 192,而 JSON 元数据必须采用 Unicode UTF-8 编码。TransferSyntaxUID 可以设置为任何有效的传输语法,但以下不支持的传输语法除外:

  • 1.2.840.10008.1.2.2(显式 VR 大端字节序)
  • 1.2.840.10008.1.2.1.99(使用 Deflate 压缩过的显式 VR 小端字节序)

在 JSON 元数据中,用户可以为 OB、OW 或 UN 的 DICOM 标记(具有 VR)指定多个 BulkDataURI。这些 BulkDataURI 表示包含 URI 的代码的二进制数据将在接下来的部分中发送,该部分将 Content-Location 标头设置为 BulkDataURI。

JSON 元数据中的每个实例最多只能有一个 BulkDataURI。JSON 元数据中不得有任何重复的 BulkDataURI。压缩映像批量数据只能针对 PixelData 标记发送,发送时,批量数据部分中指定的传输语法必须与实例的 TransferSyntaxUID 元素值匹配。

批量数据部分支持以下 Content-Type:

  • application/octet-stream
  • image/jpeg; transfer-syntax=1.2.840.10008.1.2.4.70
  • image/jpeg; transfer-syntax=1.2.840.10008.1.2.4.50
  • image/jpeg; transfer-syntax=1.2.840.10008.1.2.​4.​51
  • image/jpeg; transfer-syntax=1.2.840.10008.1.2.​4.​57
  • image/x-dicom-rle; transfer-syntax=1.2.840.10008.1.2.5
  • image/x-jls; transfer-syntax=1.2.840.10008.1.2.​4.​80
  • image/x-jls; transfer-syntax=1.2.840.10008.1.2.4.81
  • image/jp2; transfer-syntax=1.2.840.10008.1.2.4.90
  • image/jp2; transfer-syntax=1.2.840.10008.1.2.4.91
  • image/jpx; transfer-syntax=1.2.840.10008.1.2.4.92
  • image/jpx; transfer-syntax=1.2.840.10008.1.2.4.93

另一种指定二进制数据的方法是将数据编码为 InlineBinary base64 编码字符串。除 PixelData 之外的所有标记都支持使用此方法,PixelData 必须作为批量数据的一部分发送。在 JSON 元数据中使用 InlineBinary 对象时,必须在 JSON 元数据部分的 Content-Type 中指定用于编码的传输语法。

服务器不会派生图片像素说明宏属性

有关关联的方法指南,请参阅通过 JSON 元数据和 JPEG 文件创建 DICOM 实例

响应

发生错误时,将额外返回一个 FailureDetail (0009, 0097) 标记(用于 XML 响应)或 FailureDetailJSON (0009,1097) 标记(用于 JSON 响应)。FailureDetail 标记提供直观易懂的错误说明。

如果 DICOM 存储区中已存在相同的 DICOM 实例,则系统将返回包含 45070 状态代码的 WarningReason (0008, 1196) 标记。此标记后面跟着一个 WarningDetail (0009, 0096) 标记(用于 XML 响应)或一个 WarningDetailJSON (0009, 1096) 标记(用于 JSON 响应)。WarningDetail 提供了直观易懂的警告说明。如果 DICOM 实例与现有实例不同,但包含的 <StudyInstanceUID, SeriesInstanceUID, SOPInstanceUID> 元组与 DICOM 存储区中的元组相同,则系统将返回正在处理故障错误,并附带一个“already exists”FailureDetail 标记。

响应采用 JSON 还是 XML 格式,可以通过以下 Accept 标头值进行控制:

  • application/dicom+xml(默认)
  • application/dicom+json

状态代码

代码 含义
200 (OK) 资源已成功存储。
400 (Bad Request) 请求无效(例如,媒体类型或传输语法不受支持)。
401 (Unauthorized) 请求缺少身份验证凭据。
403 (Permission Denied) 已通过身份验证的用户无权访问此资源(或该资源不存在)。
406 (Not Acceptable) 服务器不支持任何可接受的媒体类型。
409 (Conflict) 至少有一项资源未成功存储(例如,DICOM 文件无效)。如需了解详情,请查看响应正文中的 FailureDetail 标记。
429 (Too Many Requests) 客户端超出了其配额
503 (Service Unavailable) 服务器当前不可用或请求已超出其截止日期。

搜索事务

检索事务是用于查询 DICOM 影像元数据的 RESTful Web 服务。

Cloud Healthcare API 支持搜索研究、系列和实例。

搜索参数

支持按以下标记进行搜索:

  • 研究:
    • StudyInstanceUID
    • PatientName
    • PatientID
    • AccessionNumber
    • ReferringPhysicianName
    • StudyDate
  • 系列:所有研究级别的搜索字词和
    • SeriesInstanceUID
    • 模态
  • 实例:所有研究/系列级别的搜索字词和
    • SOPInstanceUID

仅支持单值完全匹配,但 StudyDate 和 PatientName 除外,它们分别支持范围查询和模糊匹配。

支持下列其他网址参数:

  • fuzzymatching:如果设置为 true,则模糊匹配将应用于 PatientName 标记。“模糊匹配”将对查询中的 PatientName 值和存储的值执行令牌化和标准化。匹配的前提是任何搜索令牌是任何存储的令牌的前缀。例如,如果 PatientName 是“John^Doe”,则“jo”、“Do”和“John Doe”全部匹配。但 “ohn”不匹配。
  • includefield:可以设置为以英文逗号分隔的属性 ID(如 DICOM 标记 ID 或关键字)的列表,也可以设置为 all 值以返回所有可用标记。如需查看可用标记的列表,请参阅返回的结果

支持使用 limitoffset 查询参数进行分页。如果没有提供更多结果,则没有警告响应标头。您必须执行额外查询才能确定是否有更多结果。

  • limit:对于研究/系列和实例,应返回的结果数上限分别是 5000 个和 50000 个。研究/系列和实例的默认结果数分别为 100 个和 1000 个。

  • offset:开始时跳过的结果数最多为 1000000 个。

不支持 UTC 时区偏移量。

返回的结果

响应采用 JSON 还是 XML 格式,可以通过以下 Accept 标头值进行控制:

  • application/dicom+json(默认)
  • multipart/related; type=application/dicom+xml

默认情况下,将返回以下属性:

  • 研究:
    • SpecificCharacterSet
    • StudyDate
    • StudyTime
    • AccessionNumber
    • InstanceAvailability
    • ReferringPhysicianName
    • TimezoneOffsetFromUTC
    • PatientName
    • PatientID
    • PatientBirthDate
    • PatientSex
    • StudyInstanceUID
    • StudyID
  • 系列:
    • SpecificCharacterSet
    • 模态
    • TimezoneOffsetFromUTC
    • SeriesDescription
    • SeriesInstanceUID
    • PerformedProcedureStepStartDate
    • PerformedProcedureStepStartTime
    • RequestAttributesSequence
  • 实例:
    • SpecificCharacterSet
    • SOPClassUID
    • SOPInstanceUID
    • InstanceAvailability
    • TimezoneOffsetFromUTC
    • InstanceNumber
    • 行数
    • 列数
    • BitsAllocated
    • NumberOfFrames

对于 includefield=all,默认属性将与以下属性一起返回:

  • 研究:
    • PersonIdentificationCodeSequence
    • PersonAddress
    • PersonTelephoneNumbers
    • PersonTelecomInformation
    • InstitutionName
    • InstitutionAddress
    • InstitutionCodeSequence
    • ReferringPhysicianIdentificationSequence
    • ConsultingPhysicianName
    • ConsultingPhysicianIdentificationSequence
    • IssuerOfAccessionNumberSequence
    • LocalNamespaceEntityID
    • UniversalEntityID
    • UniversalEntityIDType
    • StudyDescription
    • PhysiciansOfRecord
    • PhysiciansOfRecordIdentificationSequence
    • NameOfPhysiciansReadingStudy
    • PhysiciansReadingStudyIdentificationSequence
    • RequestingServiceCodeSequence
    • ReferencedStudySequence
    • ProcedureCodeSequence
    • ReasonForPerformedProcedureCodeSequence
  • 系列:
    • SeriesNumber
    • 偏侧性
    • SeriesDate
    • SeriesTime
  • 实例:DICOM 实例中存在的所有属性,但不包括使用 DICOM 值表示形式来表示 OB、OD、OF、OL、OW 或 UN 的任何属性。

元数据中不会返回任何 BulkDataURI。

元数据响应中不会返回含有 1 MiB 左右的数据的 DICOM 序列标记。

元数据不一致/无效

对于 SearchForStudies/SearchForSeries,多个实例中可能存在不一致的研究/系列级别元数据。例如,可以上传两个 StudyInstanceUID 相同但 StudyDates 不同的实例。在这种情况下,搜索行为没有明确定义。在某些情况下,可以按照该值进行搜索,但在其他情况下,返回的值可能因各个调用不同而异。

状态代码

代码 含义
200 (OK) 响应载荷包含所有目标资源的表示形式。
400 (Bad Request) 请求无效(例如查询参数无效)。
401 (Unauthorized) 请求缺少身份验证凭据。
403 (Permission Denied) 已通过身份验证的用户无权访问此资源(或该资源不存在)。
406 (Not Acceptable) 服务器不支持任何可接受的媒体类型。
429 (Too Many Requests) 客户端超出了其配额
503 (Service Unavailable) 服务器当前不可用或请求已超出其截止日期。

删除

Cloud Healthcare API 支持以下专有操作类型:

  • DeleteStudy
  • DeleteSeries
  • DeleteInstance

它们使用的请求路径与其 WADA-RS 副本的请求路径相同(副本分别为 RetrieveStudy、RetrieveSeries 和 RetrieveInstance)。系统会使用 DELETE 请求,而不是 HTTP GET 请求。其结果是指定的研究、系列或实例以及其中包含的所有 DICOM 资源都会被删除。

DeleteStudyDeleteSeries 方法将返回一个长时间运行的操作,该操作会删除研究或系列中的所有实例。请注意,在操作完成之前,实例无法插入到正在被操作删除的研究或系列中。

有关操作的方法指南,请参阅管理长时间运行的操作

成功的 DeleteInstance 请求将返回空响应。

状态代码

代码 含义
200 (OK) 请求资源已被删除。
400 (Bad Request) 请求无效。
401 (Unauthorized) 请求缺少身份验证凭据。
403 (Permission Denied) 已通过身份验证的用户无权访问此资源(或该资源不存在)。
429 (Too Many Requests) 客户端超出了其配额
503 (Service Unavailable) 服务器当前不可用或请求已超出其截止日期。

Accept 标头

上述某些方法可让您使用 HTTP Accept 标头控制响应格式。顶级级别(如 */*)和子类型(如 image/*)均支持通配符匹配。还支持通过指定 q 值来指示相关偏好设置。如果未针对 Accept 标头指定 q 值,则它会设置为默认值 1.0。

如果指定了多个 Accept 标头,并且最爱的 Accept 标头之间存在关联,则服务器将选择 Accept 标头。在这种情况下,客户端不应依赖服务器是否选择 Accept 标头。

支持的 SOP 类

Cloud Healthcare API 可以注入所有 DICOM SOP 类并对其执行基本检索。对于需要在图片格式之间进行转码的任何检索,请参阅转码支持的传输语法以查看受支持的传输语法列表。

代码值限制

对于帧检索,BitsAllocated 标记的值必须是 8 的倍数。