Bagikan melalui


Menggunakan DICOMweb Standard API dengan cURL

Artikel ini memperlihatkan cara bekerja dengan layanan DICOMweb menggunakan cURL dan sampel .dcm file DICOMĀ®.

Gunakan file sampel ini:

  • blue-circle.dcm
  • dicom-metadata.csv
  • green-square.dcm
  • red-triangle.dcm

Nama file, studyUID, seriesUID, dan instanceUID dari sampel file DICOM adalah:

File StudyUID SeriesUID InstanceUID
green-square.dcm 1.2.826.0.1.3680043.8.498.13230779778012324449356534479549187420 1.2.826.0.1.3680043.8.498.45787841905473114233124723359129632652 1.2.826.0.1.3680043.8.498.12714725698140337137334606354172323212
red-triangle.dcm 1.2.826.0.1.3680043.8.498.13230779778012324449356534479549187420 1.2.826.0.1.3680043.8.498.45787841905473114233124723359129632652 1.2.826.0.1.3680043.8.498.47359123102728459884412887463296905395
blue-circle.dcm 1.2.826.0.1.3680043.8.498.13230779778012324449356534479549187420 1.2.826.0.1.3680043.8.498.77033797676425927098669402985243398207 1.2.826.0.1.3680043.8.498.13273713909719068980354078852867170114

Catatan

Masing-masing file ini mewakili satu instans dan merupakan bagian dari studi yang sama. Selain itu, segitiga hijau-persegi dan merah adalah bagian dari seri yang sama, sementara lingkaran biru berada dalam seri terpisah.

Prasyarat

Untuk menggunakan DICOM Standard API, Anda harus memiliki instans layanan DICOM yang disebarkan. Untuk informasi selengkapnya, lihat Menyebarkan layanan DICOM menggunakan portal Azure.

Setelah menyebarkan instans layanan DICOM, ambil URL untuk layanan Aplikasi Anda.

  1. Masuk ke portal Azure.
  2. Cari Sumber daya Terbaru dan pilih instans layanan DICOM Anda.
  3. Salin URL Layanan layanan DICOM Anda.
  4. Jika Anda memerlukan token akses, lihat Mendapatkan token akses untuk layanan DICOM.

Untuk kode ini, kami mengakses layanan Pratinjau Publik Azure. Penting bahwa Anda tidak mengunggah informasi kesehatan privat (PHI).

Bekerja dengan layanan DICOM

DICOMweb Standard membuat penggunaan permintaan HTTP yang multipart/related berat dikombinasikan dengan header terima khusus DICOM. Pengembang yang terbiasa dengan API berbasis REST lainnya sering menemukan bekerja dengan DICOMweb Standard canggung. Namun, setelah Anda bangun dan berjalan, mudah digunakan. Hanya perlu sedikit keakraban untuk memulai.

Perintah cURL masing-masing berisi setidaknya satu, dan kadang-kadang dua, variabel yang harus diganti. Untuk menyederhanakan menjalankan perintah, cari dan ganti variabel berikut nilai spesifik Anda.

  • {URL Layanan} URL layanan adalah URL untuk mengakses layanan DICOM yang Anda provisikan di portal Azure, misalnya, https://<workspacename-dicomservicename>.dicom.azurehealthcareapis.com. Pastikan untuk menentukan versi sebagai bagian dari url saat membuat permintaan. Informasi lebih lanjut dapat ditemukan di Dokumentasi layanan Penerapan Versi API untuk DICOM.
  • {path-to-dicoms} - Jalur ke direktori yang berisi file red-triangle.dcm, seperti C:/dicom-server/docs/dcms
    • Pastikan menggunakan garis miring sebagai pemisah dan akhiri direktori tanpa garis miring berikutnya.

Mengunggah instans DICOM (STOW)

Menyimpan instans menggunakan multipart/related

Permintaan ini ingin menunjukkan cara mengunggah file DICOM menggunakan multipart/related.

Catatan

Layanan DICOM lebih lenient dari standar DICOM. Namun, contoh menunjukkan permintaan POST yang mematuhi dengan ketat ke standar.

Detail:

  • Jalan:.. /Studi
  • Metode: POST
  • Header:
    • Terima: application/dicom+json
    • Jenis Konten: multipihak/terkait; type="application/dicom"
    • Otorisasi: Pembawa {nilai token}
  • Badan:
    • Jenis Konten: aplikasi/dicom untuk setiap file yang diunggah, dipisahkan oleh nilai batas

Beberapa bahasa dan alat pemrograman berulah secara berbeda. Misalnya, beberapa mengharuskan Anda menentukan batas Anda sendiri. Untuk alat tersebut, Anda mungkin perlu menggunakan header Content-Type yang sedikit dimodifikasi. Alat berikut dapat berhasil digunakan.

  • Jenis Konten: multipihak/terkait; type="application/dicom"; boundary=ABCD1234
  • Jenis Konten: multipihak/terkait; boundary=ABCD1234
  • Tipe Konten: multipihak/terkait
curl --location --request POST "{Service URL}/v{version}/studies"
--header "Accept: application/dicom+json"
--header "Content-Type: multipart/related; type=\"application/dicom\""
--header "Authorization: Bearer {token value}"
--form "file1=@{path-to-dicoms}/red-triangle.dcm;type=application/dicom"
--trace-ascii "trace.txt"

Menyimpan instans untuk studi tertentu

Permintaan ini menunjukkan cara mengunggah file DICOM menggunakan multipart/terkait dengan studi yang ditunjuk.

Detail:

  • Jalan:.. /studies/{study}
  • Metode: POST
  • Header:
    • Terima: application/dicom+json
    • Jenis Konten: multipihak/terkait; type="application/dicom"
    • Otorisasi: Pembawa {nilai token}
  • Badan:
    • Jenis Konten: aplikasi/dicom untuk setiap file yang diunggah, dipisahkan oleh nilai batas

Beberapa bahasa dan alat pemrograman berulah secara berbeda. Misalnya, beberapa mengharuskan Anda menentukan batas Anda sendiri. Untuk bahasa dan alat tersebut, Anda mungkin perlu menggunakan header Tipe Konten yang sedikit dimodifikasi. Alat berikut dapat berhasil digunakan.

  • Jenis Konten: multipihak/terkait; type="application/dicom"; boundary=ABCD1234
  • Jenis Konten: multipihak/terkait; boundary=ABCD1234
  • Tipe Konten: multipihak/terkait
curl --request POST "{Service URL}/v{version}/studies/1.2.826.0.1.3680043.8.498.13230779778012324449356534479549187420"
--header "Accept: application/dicom+json"
--header "Content-Type: multipart/related; type=\"application/dicom\""
--header "Authorization: Bearer {token value}"
--form "file1=@{path-to-dicoms}/blue-circle.dcm;type=application/dicom"

Store-single-instance

Catatan

Ini adalah API non-standar yang memungkinkan pengunggahan satu file DICOM tanpa perlu mengonfigurasi POST untuk multipart/related. Meskipun cURL menangani sumur multipart/related, API ini memungkinkan alat seperti Postman mengunggah file ke layanan DICOM.

Metode berikut diperlukan untuk mengunggah satu file DICOM.

Detail:

  • Jalan:.. /Studi
  • Metode: POST
  • Header:
    • Terima: application/dicom+json
    • Jenis Konten: aplikasi/dicom
    • Otorisasi: Pembawa {nilai token}
  • Badan:
    • Berisi satu file DICOM sebagai byte biner.
curl --location --request POST "{Service URL}/v{version}/studies"
--header "Accept: application/dicom+json"
--header "Content-Type: application/dicom"
--header "Authorization: Bearer {token value}"
--data-binary "@{path-to-dicoms}/green-square.dcm"

Upsert instans menggunakan multipart/related

Catatan

Ini adalah API non-standar yang memungkinkan upsert file DICOM menggunakan multipart/related.

Detail:

  • Jalan:.. /Studi
  • Metode: PUT
  • Header:
    • Terima: application/dicom+json
    • Jenis Konten: multipihak/terkait; type="application/dicom"
    • Otorisasi: Pembawa {nilai token}
  • Badan:
    • Jenis Konten: aplikasi/dicom untuk setiap file yang diunggah, dipisahkan oleh nilai batas

Beberapa bahasa dan alat pemrograman berulah secara berbeda. Misalnya, beberapa mengharuskan Anda menentukan batas Anda sendiri. Untuk alat tersebut, Anda mungkin perlu menggunakan header Content-Type yang sedikit dimodifikasi. Alat berikut dapat berhasil digunakan.

  • Jenis Konten: multipihak/terkait; type="application/dicom"; boundary=ABCD1234
  • Jenis Konten: multipihak/terkait; boundary=ABCD1234
  • Tipe Konten: multipihak/terkait
curl --location --request PUT "{Service URL}/v{version}/studies"
--header "Accept: application/dicom+json"
--header "Content-Type: multipart/related; type=\"application/dicom\""
--header "Authorization: Bearer {token value}"
--form "file1=@{path-to-dicoms}/red-triangle.dcm;type=application/dicom"
--trace-ascii "trace.txt"

Instans upsert untuk studi tertentu

Catatan

Ini adalah API non-standar yang memungkinkan upsert file DICOM menggunakan multipart/terkait dengan studi yang ditunjuk.

Detail:

  • Jalan:.. /studies/{study}
  • Metode: PUT
  • Header:
    • Terima: application/dicom+json
    • Jenis Konten: multipihak/terkait; type="application/dicom"
    • Otorisasi: Pembawa {nilai token}
  • Badan:
    • Jenis Konten: aplikasi/dicom untuk setiap file yang diunggah, dipisahkan oleh nilai batas

Beberapa bahasa dan alat pemrograman berulah secara berbeda. Misalnya, beberapa mengharuskan Anda menentukan batas Anda sendiri. Untuk bahasa dan alat tersebut, Anda mungkin perlu menggunakan header Tipe Konten yang sedikit dimodifikasi. Alat berikut dapat berhasil digunakan.

  • Jenis Konten: multipihak/terkait; type="application/dicom"; boundary=ABCD1234
  • Jenis Konten: multipihak/terkait; boundary=ABCD1234
  • Tipe Konten: multipihak/terkait
curl --request PUT "{Service URL}/v{version}/studies/1.2.826.0.1.3680043.8.498.13230779778012324449356534479549187420"
--header "Accept: application/dicom+json"
--header "Content-Type: multipart/related; type=\"application/dicom\""
--header "Authorization: Bearer {token value}"
--form "file1=@{path-to-dicoms}/blue-circle.dcm;type=application/dicom"

Upsert instans tunggal

Catatan

Ini adalah API non-standar yang memungkinkan upsert dari satu file DICOM.

Gunakan metode ini untuk mengunggah satu file DICOM.

Detail:

  • Jalan:.. /Studi
  • Metode: PUT
  • Header:
    • Terima: application/dicom+json
    • Jenis Konten: aplikasi/dicom
    • Otorisasi: Pembawa {nilai token}
  • Badan:
    • Berisi satu file DICOM sebagai byte biner.
curl --location --request PUT "{Service URL}/v{version}/studies"
--header "Accept: application/dicom+json"
--header "Content-Type: application/dicom"
--header "Authorization: Bearer {token value}"
--data-binary "@{path-to-dicoms}/green-square.dcm"

Mengambil DICOM (WADO)

Mengambil semua instans dalam studi

Permintaan ini mengambil semua instans dalam satu studi dan mengembalikannya sebagai kumpulan byte multibagian/terkait.

Detail:

  • Jalan:.. /studies/{study}
  • Metode: GET
  • Header:
    • Terima: multipihak/terkait; type="application/dicom"; transfer-sintaks=*
    • Otorisasi: Pembawa {nilai token}
curl --request GET "{Service URL}/v{version}/studies/1.2.826.0.1.3680043.8.498.13230779778012324449356534479549187420"
--header "Accept: multipart/related; type=\"application/dicom\"; transfer-syntax=*"
--header "Authorization: Bearer {token value}"
--output "suppressWarnings.txt"

Perintah cURL ini menunjukkan byte yang diunduh dalam file output (suppressWarnings.txt), tetapi tidak mengarahkan file DICOM, hanya representasi teks dari unduhan multipihak/terkait.

Mengambil metadata semua instans dalam studi

Permintaan ini mengambil metadata untuk semua instans dalam satu studi.

Detail:

  • Jalan:.. /studies/{study}/metadata
  • Metode: GET
  • Header:
    • Terima: application/dicom+json
    • Otorisasi: Pembawa {nilai token}

Perintah cURL ini menunjukkan byte yang diunduh dalam file output (suppressWarnings.txt), tetapi tidak mengarahkan file DICOM, hanya representasi teks dari unduhan multipihak/terkait.

curl --request GET "{Service URL}/v{version}/studies/1.2.826.0.1.3680043.8.498.13230779778012324449356534479549187420/metadata"
--header "Accept: application/dicom+json"
--header "Authorization: Bearer {token value}"

Mengambil semua instans dalam seri

Permintaan ini mengambil semua instans dalam satu seri, dan mengembalikannya sebagai kumpulan byte multibagian/terkait.

Detail:

  • Jalan:.. /studies/{study}/series/{series}
  • Metode: GET
  • Header:
    • Terima: multipihak/terkait; type="application/dicom"; transfer-sintaks=*
    • Otorisasi: Pembawa {nilai token}

Perintah cURL ini menunjukkan byte yang diunduh dalam file output (suppressWarnings.txt), tetapi bukan file DICOM, hanya representasi teks dari unduhan multipart/terkait.

curl --request GET "{Service URL}/v{version}/studies/1.2.826.0.1.3680043.8.498.13230779778012324449356534479549187420/series/1.2.826.0.1.3680043.8.498.45787841905473114233124723359129632652"
--header "Accept: multipart/related; type=\"application/dicom\"; transfer-syntax=*"
--header "Authorization: Bearer {token value}"
--output "suppressWarnings.txt"

Mengambil metadata semua instans dalam seri

Permintaan ini mengambil metadata untuk semua instans dalam satu studi.

Detail:

  • Jalan:.. /studies/{study}/series/{series}/metadata
  • Metode: GET
  • Header:
    • Terima: application/dicom+json
    • Otorisasi: Pembawa {nilai token}
curl --request GET "{Service URL}/v{version}/studies1.2.826.0.1.3680043.8.498.13230779778012324449356534479549187420/series/1.2.826.0.1.3680043.8.498.45787841905473114233124723359129632652/metadata"
--header "Accept: application/dicom+json"
--header "Authorization: Bearer {token value}"

Mengambil satu instans dalam serangkaian studi

Permintaan ini mengambil satu instans, dan mengembalikannya sebagai aliran byte yang diformat DICOM.

Detail:

  • Jalan:.. /studies/{study}/series{series}/instances/{instance}
  • Metode: GET
  • Header:
    • Terima: aplikasi/dicom; transfer-sintaks=*
    • Otorisasi: Pembawa {nilai token}
curl --request GET "{Service URL}/v{version}/studies/1.2.826.0.1.3680043.8.498.13230779778012324449356534479549187420/series/1.2.826.0.1.3680043.8.498.45787841905473114233124723359129632652/instances/1.2.826.0.1.3680043.8.498.47359123102728459884412887463296905395"
--header "Accept: application/dicom; transfer-syntax=*"
--header "Authorization: Bearer {token value}"
--output "suppressWarnings.txt"

Mengambil metadata dari satu instans dalam serangkaian studi

Permintaan ini mengambil metadata untuk satu instans dalam satu studi dan seri.

Detail:

  • Jalan:.. /studies/{study}/series/{series}/instances/{instance}/metadata
  • Metode: GET
  • Header:
    • Terima: application/dicom+json
    • Otorisasi: Pembawa {nilai token}
curl --request GET "{Service URL}/v{version}/studies/1.2.826.0.1.3680043.8.498.13230779778012324449356534479549187420/series/1.2.826.0.1.3680043.8.498.45787841905473114233124723359129632652/instances/1.2.826.0.1.3680043.8.498.47359123102728459884412887463296905395/metadata"
--header "Accept: application/dicom+json"
--header "Authorization: Bearer {token value}"

Mengambil satu atau beberapa bingkai dari satu instans

Permintaan ini mengambil satu atau beberapa bingkai dari satu instans, dan mengembalikannya sebagai kumpulan byte multibagian/terkait. Beberapa bingkai dapat diambil dengan meneruskan daftar nomor bingkai yang dipisahkan koma. Semua instans DICOM dengan gambar memiliki minimal satu bingkai, yang sering kali hanya gambar yang terkait dengan instans itu sendiri.

Detail:

  • Jalan:.. /studies/{study}/series{series}/instances/{instance}/frames/1,2,3
  • Metode: GET
  • Header:
    • Terima: multipihak/terkait; type="application/octet-stream"; transfer-sintaks=1.2.840.10008.1.2.1 (Default) atau
    • Terima: multipihak/terkait; type="application/octet-stream"; transfer-sintaks=* atau
    • Terima: multipihak/terkait; type="application/octet-stream";
    • Otorisasi: Pembawa {nilai token}
curl --request GET "{Service URL}/v{version}/studies/1.2.826.0.1.3680043.8.498.13230779778012324449356534479549187420/series/1.2.826.0.1.3680043.8.498.45787841905473114233124723359129632652/instances/1.2.826.0.1.3680043.8.498.47359123102728459884412887463296905395/frames/1"
--header "Accept: multipart/related; type=\"application/octet-stream\"; transfer-syntax=1.2.840.10008.1.2.1"
--header "Authorization: Bearer {token value}"
--output "suppressWarnings.txt"

KUERI DICOM (QIDO)

Dalam contoh berikut, kami mencari item menggunakan pengidentifikasi uniknya. Anda juga dapat mencari atribut lain, seperti PatientName.

Mencari studi

Permintaan ini memungkinkan pencarian untuk satu atau beberapa studi oleh atribut DICOM.

Untuk informasi selengkapnya tentang atribut DICOM yang didukung, lihat Pernyataan Kesuaian DICOM.

Detail:

  • Jalan:.. /Studi? StudyInstanceUID={study}
  • Metode: GET
  • Header:
    • Terima: application/dicom+json
    • Otorisasi: Pembawa {nilai token}
curl --request GET "{Service URL}/v{version}/studies?StudyInstanceUID=1.2.826.0.1.3680043.8.498.13230779778012324449356534479549187420"
--header "Accept: application/dicom+json"
--header "Authorization: Bearer {token value}"

Cari seri

Permintaan ini memungkinkan pencarian untuk satu atau beberapa seri menurut atribut DICOM.

Untuk informasi selengkapnya tentang atribut DICOM yang didukung, lihat Pernyataan Kesuaian DICOM.

Detail:

  • Jalan:.. /seri? SeriesInstanceUID={series}
  • Metode: GET
  • Header:
    • Terima: application/dicom+json
    • Otorisasi: Pembawa {nilai token}
curl --request GET "{Service URL}/v{version}/series?SeriesInstanceUID=1.2.826.0.1.3680043.8.498.45787841905473114233124723359129632652"
--header "Accept: application/dicom+json"
--header "Authorization: Bearer {token value}"

Mencari seri dalam studi

Permintaan ini memungkinkan pencarian untuk satu atau beberapa seri dalam satu studi oleh atribut DICOM.

Untuk informasi selengkapnya tentang atribut DICOM yang didukung, lihat Pernyataan Kesuaian DICOM.

Detail:

  • Jalan:.. /studies/{study}/series? SeriesInstanceUID={series}
  • Metode: GET
  • Header:
    • Terima: application/dicom+json
    • Otorisasi: Pembawa {nilai token}
curl --request GET "{Service URL}/v{version}/studies/1.2.826.0.1.3680043.8.498.13230779778012324449356534479549187420/series?SeriesInstanceUID=1.2.826.0.1.3680043.8.498.45787841905473114233124723359129632652"
--header "Accept: application/dicom+json"
--header "Authorization: Bearer {token value}"

Mencari instans

Permintaan ini memungkinkan pencarian untuk satu atau beberapa instans dengan atribut DICOM.

Untuk informasi selengkapnya tentang atribut DICOM yang didukung, lihat Pernyataan Kesuaian DICOM.

Detail:

  • Jalan:.. /Contoh? SOPInstanceUID={instance}
  • Metode: GET
  • Header:
    • Terima: application/dicom+json
    • Otorisasi: Pembawa {nilai token}
curl --request GET "{Service URL}/v{version}/instances?SOPInstanceUID=1.2.826.0.1.3680043.8.498.47359123102728459884412887463296905395"
--header "Accept: application/dicom+json"
--header "Authorization: Bearer {token value}"

Mencari instans dalam studi

Permintaan ini memungkinkan pencarian untuk satu atau beberapa instans dalam satu studi oleh atribut DICOM.

Untuk informasi selengkapnya tentang atribut DICOM yang didukung, lihat Pernyataan Kesuaian DICOM.

Detail:

  • Jalan:.. /studies/{study}/instances? SOPInstanceUID={instance}
  • Metode: GET
  • Header:
    • Terima: application/dicom+json
    • Otorisasi: Pembawa {nilai token}
curl --request GET "{Service URL}/v{version}/studies/1.2.826.0.1.3680043.8.498.13230779778012324449356534479549187420/instances?SOPInstanceUID=1.2.826.0.1.3680043.8.498.47359123102728459884412887463296905395"
--header "Accept: application/dicom+json"
--header "Authorization: Bearer {token value}"

Mencari instans dalam studi dan seri

Permintaan ini memungkinkan pencarian untuk satu atau beberapa instans dalam satu studi dan satu seri oleh atribut DICOM.

Untuk informasi selengkapnya tentang atribut DICOM yang didukung, lihat Pernyataan Kesuaian DICOM

Detail:

  • Jalan:.. /studies/{study}/series/{series}/instances? SOPInstanceUID={instance}
  • Metode: GET
  • Header:
    • Terima: application/dicom+json
    • Otorisasi: Pembawa {nilai token}
curl --request GET "{Service URL}/v{version}/studies/1.2.826.0.1.3680043.8.498.13230779778012324449356534479549187420/series/1.2.826.0.1.3680043.8.498.45787841905473114233124723359129632652/instances?SOPInstanceUID=1.2.826.0.1.3680043.8.498.47359123102728459884412887463296905395"
--header "Accept: application/dicom+json"
--header "Authorization: Bearer {token value}"

Hapus DICOM

Menghapus instans tertentu dalam studi dan seri

Permintaan ini menghapus satu instans dalam satu studi dan satu seri.

Penghapusan bukan bagian dari standar DICOM, tetapi ditambahkan untuk kenyamanan.

Detail:

  • Jalan:.. /studies/{study}/series/{series}/instances/{instance}
  • Metode: DELETE
  • Header:
    • Otorisasi: Pembawa {nilai token}
curl --request DELETE "{Service URL}/v{version}/studies/1.2.826.0.1.3680043.8.498.13230779778012324449356534479549187420/series/1.2.826.0.1.3680043.8.498.45787841905473114233124723359129632652/instances/1.2.826.0.1.3680043.8.498.47359123102728459884412887463296905395"
--header "Authorization: Bearer {token value}"

Menghapus seri tertentu dalam studi

Permintaan ini menghapus satu seri (dan semua instans anak) dalam satu studi.

Penghapusan bukan bagian dari standar DICOM, tetapi ditambahkan untuk kenyamanan.

Detail:

  • Jalan:.. /studies/{study}/series/{series}
  • Metode: DELETE
  • Header:
    • Otorisasi: Pembawa {nilai token}
curl --request DELETE "{Service URL}/v{version}/studies/1.2.826.0.1.3680043.8.498.13230779778012324449356534479549187420/series/1.2.826.0.1.3680043.8.498.45787841905473114233124723359129632652"
--header "Authorization: Bearer {token value}"

Menghapus studi tertentu

Permintaan ini menghapus satu studi (dan semua seri dan instans anak).

Penghapusan bukan bagian dari standar DICOM, tetapi ditambahkan untuk kenyamanan.

Detail:

  • Jalan:.. /studies/{study}
  • Metode: DELETE
  • Header:
    • Otorisasi: Pembawa {nilai token}
curl--request DELETE "{Service URL}/v{version}/studies/1.2.826.0.1.3680043.8.498
--header "Authorization: Bearer {token value}"

Catatan

DICOMĀ® adalah merek dagang terdaftar dari Asosiasi Produsen Listrik Nasional untuk publikasi Standar yang berkaitan dengan komunikasi digital informasi medis.