Build a Google API request
Intended primarily for internal use in client packages that provide high-level wrappers for users. The vignette Request helper functions describes how one might use these functions inside a wrapper package.
request_develop( endpoint, params = list(), base_url = "https://www.googleapis.com" ) request_build( method = "GET", path = "", params = list(), body = list(), token = NULL, key = NULL, base_url = "https://www.googleapis.com" )
endpoint |
List of information about the target endpoint or, in Google's vocabulary, the target "method". Presumably prepared from the Discovery Document for the target API. |
params |
Named list. Values destined for URL substitution, the query,
or, for |
base_url |
Character. |
method |
Character. An HTTP verb, such as |
path |
Character. Path to the resource, not including the API's
|
body |
List. Values to send in the API request body. |
token |
Token, ready for inclusion in a request, i.e. prepared with
|
key |
API key. Needed for requests that don't contain a token. For more,
see Google's document Credentials, access, security, and identity.
A key can be passed as a named component of |
request_develop()
: list()
with components method
, path
, params
,
body
, and base_url
.
request_build()
: list()
with components method
, path
(post-substitution), query
(the input params
not used in URL
substitution), body
, token
, url
(the full URL, post-substitution,
including the query).
request_develop()
Combines user input (params
) with information about an API endpoint.
endpoint
should contain these components:
path
: See documentation for argument.
method
: See documentation for argument.
parameters
: Compared with params
supplied by user. An error is
thrown if user-supplied params
aren't named in
endpoint$parameters
or if user fails to supply all required
parameters. In the return value, body parameters are separated from
those destined for path substitution or the query.
The return value is typically used as input to request_build()
.
request_build()
Builds a request, in a purely mechanical sense. This function does nothing specific to any particular Google API or endpoint.
Use with the output of request_develop()
or with hand-crafted input.
params
are used for variable substitution in path
. Leftover params
that are not bound by the path
template automatically become HTTP
query parameters.
Adds an API key to the query iff token = NULL
and removes the API key
otherwise. Client packages should generally pass their own API key in, but
note that gargle_api_key()
is available for small-scale experimentation.
See googledrive::generate_request()
for an example of usage in a client
package. googledrive has an internal list of selected endpoints, derived from
the Drive API Discovery Document,
exposed via googledrive::drive_endpoints()
. An element from such a list is
the expected input for endpoint
. googledrive::generate_request()
is a
wrapper around request_develop()
and request_build()
that inserts a
googledrive-managed API key and some logic about Team Drives. All user-facing
functions use googledrive::generate_request()
under the hood.
Other requests and responses:
request_make()
,
response_process()
## Not run: ## Example with a prepared endpoint ept <- googledrive::drive_endpoints("drive.files.update")[[1]] req <- request_develop( ept, params = list( fileId = "abc", addParents = "123", description = "Exciting File" ) ) req req <- request_build( method = req$method, path = req$path, params = req$params, body = req$body, token = "PRETEND_I_AM_A_TOKEN" ) req ## Example with no previous knowledge of the endpoint ## List a file's comments ## https://developers.google.com/drive/v3/reference/comments/list req <- request_build( method = "GET", path = "drive/v3/files/{fileId}/comments", params = list( fileId = "your-file-id-goes-here", fields = "*" ), token = "PRETEND_I_AM_A_TOKEN" ) req # Example with no previous knowledge of the endpoint and no token # use an API key for which the Places API is enabled! API_KEY <- "1234567890" # get restaurants close to a location in Vancouver, BC req <- request_build( method = "GET", path = "maps/api/place/nearbysearch/json", params = list( location = "49.268682,-123.167117", radius = 100, type = "restaurant" ), key = API_KEY, base_url = "https://maps.googleapis.com" ) resp <- request_make(req) out <- response_process(resp) vapply(out$results, function(x) x$name, character(1)) ## End(Not run)
Please choose more modern alternatives, such as Google Chrome or Mozilla Firefox.