ca.uhn.fhir.rest.gclient.IClientExecutable Maven / Gradle / Ivy
/*
* #%L
* HAPI FHIR - Core Library
* %%
* Copyright (C) 2014 - 2024 Smile CDR, Inc.
* %%
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* #L%
*/
package ca.uhn.fhir.rest.gclient;
import ca.uhn.fhir.rest.api.CacheControlDirective;
import ca.uhn.fhir.rest.api.EncodingEnum;
import ca.uhn.fhir.rest.api.RequestFormatParamStyleEnum;
import ca.uhn.fhir.rest.api.SummaryEnum;
import org.hl7.fhir.instance.model.api.IBaseResource;
import java.util.List;
public interface IClientExecutable, Y> {
/**
* If set to true, the client will log the request and response to the SLF4J logger. This can be useful for
* debugging, but is generally not desirable in a production situation.
*
* @deprecated Use the client logging interceptor to log requests and responses instead. See here for more information.
*/
@Deprecated
T andLogRequestAndResponse(boolean theLogRequestAndResponse);
/**
* Sets the Cache-Control
header value, which advises the server (or any cache in front of it)
* how to behave in terms of cached requests
*/
T cacheControl(CacheControlDirective theCacheControlDirective);
/**
* Request that the server return subsetted resources, containing only the elements specified in the given parameters.
* For example: subsetElements("name", "identifier")
requests that the server only return
* the "name" and "identifier" fields in the returned resource, and omit any others.
*/
T elementsSubset(String... theElements);
/**
* Request that the server respond with JSON via the Accept header and possibly also the
* _format
parameter if {@link ca.uhn.fhir.rest.client.api.IRestfulClient#setFormatParamStyle(RequestFormatParamStyleEnum) configured to do so}.
*
* This method will have no effect if {@link #accept(String) a custom Accept header} is specified.
*
*
* @see #accept(String)
*/
T encoded(EncodingEnum theEncoding);
/**
* Request that the server respond with JSON via the Accept header and possibly also the
* _format
parameter if {@link ca.uhn.fhir.rest.client.api.IRestfulClient#setFormatParamStyle(RequestFormatParamStyleEnum) configured to do so}.
*
* This method will have no effect if {@link #accept(String) a custom Accept header} is specified.
*
*
* @see #accept(String)
* @see #encoded(EncodingEnum)
*/
T encodedJson();
/**
* Request that the server respond with JSON via the Accept header and possibly also the
* _format
parameter if {@link ca.uhn.fhir.rest.client.api.IRestfulClient#setFormatParamStyle(RequestFormatParamStyleEnum) configured to do so}.
*
* This method will have no effect if {@link #accept(String) a custom Accept header} is specified.
*
*
* @see #accept(String)
* @see #encoded(EncodingEnum)
*/
T encodedXml();
/**
* Set a HTTP header not explicitly defined in FHIR but commonly used in real-world scenarios. One
* important example is to set the Authorization header (e.g. Basic Auth or OAuth2-based Bearer auth),
* which tends to be cumbersome using {@link ca.uhn.fhir.rest.client.api.IClientInterceptor IClientInterceptors},
* particularly when REST clients shall be reused and are thus supposed to remain stateless.
* It is the responsibility of the caller to care for proper encoding of the header value, e.g.
* using Base64.
* This is a short-cut alternative to using a corresponding client interceptor
*
* @param theHeaderName header name
* @param theHeaderValue header value
* @return
*/
T withAdditionalHeader(String theHeaderName, String theHeaderValue);
/**
* Actually execute the client operation
*/
Y execute();
/**
* Explicitly specify a custom structure type to attempt to use when parsing the response. This
* is useful for invocations where the response is a Bundle/Parameters containing nested resources,
* and you want to use specific custom structures for those nested resources.
*
* See Profiles and Extensions for more information on using custom structures
*
*/
T preferResponseType(Class extends IBaseResource> theType);
/**
* Explicitly specify a list of custom structure types to attempt to use (in order from most to
* least preferred) when parsing the response. This
* is useful for invocations where the response is a Bundle/Parameters containing nested resources,
* and you want to use specific custom structures for those nested resources.
*
* See Profiles and Extensions for more information on using custom structures
*
*/
T preferResponseTypes(List> theTypes);
/**
* Request pretty-printed response via the _pretty
parameter
*/
T prettyPrint();
/**
* Request that the server modify the response using the _summary
param
*/
T summaryMode(SummaryEnum theSummary);
/**
* Specifies a custom Accept
header that should be supplied with the
* request.
*
* Note that this method overrides any encoding preferences specified with
* {@link #encodedJson()} or {@link #encodedXml()}. It is generally easier to
* just use those methods if you simply want to request a specific FHIR encoding.
*
*
* @param theHeaderValue The header value, e.g. "application/fhir+json". Constants such
* as {@link ca.uhn.fhir.rest.api.Constants#CT_FHIR_XML_NEW} and
* {@link ca.uhn.fhir.rest.api.Constants#CT_FHIR_JSON_NEW} may
* be useful. If set to null
or an empty string, the
* default Accept header will be used.
* @see #encoded(EncodingEnum)
* @see #encodedJson()
* @see #encodedXml()
*/
T accept(String theHeaderValue);
}