根据使用查询参数指定的搜索条件,如果资源存在,则更新整个资源。
代码示例
Go
在试用此示例之前,请按照使用客户端库的 Cloud Healthcare API 快速入门中的 Go 设置说明进行操作。如需了解详情,请参阅 Cloud Healthcare API Go API 参考文档。
如需向 Cloud Healthcare API 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证。
import (
"bytes"
"context"
"encoding/json"
"fmt"
"io"
"io/ioutil"
"time"
healthcare "google.golang.org/api/healthcare/v1beta1"
)
// queryParamOpt is a googleapi.Option (https://godoc.org/google.golang.org/api/googleapi#CallOption)
// that adds query parameters to an API call.
type queryParamOpt struct {
key, value string
}
func (qp queryParamOpt) Get() (string, string) { return qp.key, qp.value }
// ConditionalUpdateFHIRResource conditionally updates an FHIR resource.
func ConditionalUpdateFHIRResource(w io.Writer, projectID, location, datasetID, fhirStoreID, resourceType string, active bool) error {
// projectID := "my-project"
// location := "us-central1"
// datasetID := "my-dataset"
// fhirStoreID := "my-fhir-store"
// resourceType := "Patient"
// active := true
ctx := context.Background()
healthcareService, err := healthcare.NewService(ctx)
if err != nil {
return fmt.Errorf("healthcare.NewService: %w", err)
}
fhirService := healthcareService.Projects.Locations.Datasets.FhirStores.Fhir
parent := fmt.Sprintf("projects/%s/locations/%s/datasets/%s/fhirStores/%s", projectID, location, datasetID, fhirStoreID)
payload := map[string]interface{}{
"resourceType": resourceType,
"active": active,
}
jsonPayload, err := json.Marshal(payload)
if err != nil {
return fmt.Errorf("json.Encode: %w", err)
}
call := fhirService.ConditionalUpdate(parent, resourceType, bytes.NewReader(jsonPayload))
call.Header().Set("Content-Type", "application/fhir+json")
// Refine your search by appending tags to the request in the form of query
// parameters. This searches for resources updated in the last 48 hours.
twoDaysAgo := time.Now().Add(-48 * time.Hour).Format("2006-01-02")
lastUpdated := queryParamOpt{key: "_lastUpdated", value: "gt" + twoDaysAgo}
resp, err := call.Do(lastUpdated)
if err != nil {
return fmt.Errorf("ConditionalUpdate: %w", err)
}
defer resp.Body.Close()
respBytes, err := ioutil.ReadAll(resp.Body)
if err != nil {
return fmt.Errorf("could not read response: %w", err)
}
if resp.StatusCode > 299 {
return fmt.Errorf("ConditionalUpdate: status %d %s: %s", resp.StatusCode, resp.Status, respBytes)
}
fmt.Fprintf(w, "%s", respBytes)
return nil
}
Python
在试用此示例之前,请按照使用客户端库的 Cloud Healthcare API 快速入门中的 Python 设置说明进行操作。如需了解详情,请参阅 Cloud Healthcare API Python API 参考文档。
如需向 Cloud Healthcare API 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证。
def conditional_update_resource(
service_account_json,
base_url,
project_id,
cloud_region,
dataset_id,
fhir_store_id,
patient_id,
encounter_id,
):
"""
If a resource is found based on the search criteria specified in
the query parameters, updates the entire contents of that resource.
"""
url = f"{base_url}/projects/{project_id}/locations/{cloud_region}"
# The search query in this request updates all Observations
# using the Observation's identifier (ABC-12345 in my-code-system)
# so that their 'status' is 'cancelled'.
resource_path = "{}/datasets/{}/fhirStores/{}/fhir/Observation".format(
url, dataset_id, fhir_store_id
)
# Make an authenticated API request
session = get_session(service_account_json)
body = {
"resourceType": "Observation",
"status": "cancelled",
"subject": {"reference": f"Patient/{patient_id}"},
"effectiveDateTime": "2020-01-01T00:00:00+00:00",
"code": {
"coding": [
{
"system": "http://loinc.org",
"code": "8867-4",
"display": "Heart rate",
}
]
},
"valueQuantity": {"value": 55, "unit": "bpm"},
"encounter": {"reference": f"Encounter/{encounter_id}"},
}
headers = {"Content-Type": "application/fhir+json;charset=utf-8"}
params = {"identifier": "my-code-system|ABC-12345"}
response = session.put(resource_path, headers=headers, params=params, json=body)
response.raise_for_status()
resource = response.json()
print(
"Conditionally updated Observations with the identifier "
"'my-code-system|ABC-12345' to have a 'status' of "
"'cancelled'."
)
print(json.dumps(resource, indent=2))
return resource
后续步骤
如需搜索和过滤其他 Google Cloud 产品的代码示例,请参阅 Google Cloud 示例浏览器。