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.
- Masuk ke portal Azure.
- Cari Sumber daya Terbaru dan pilih instans layanan DICOM Anda.
- Salin URL Layanan layanan DICOM Anda.
- 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.