Context
Using Go context with SP client
Gosip client respects native Go Context, you can pass a context on a low level or to a Fluent API to control requests's deadlines, cancellation signals, and other request-scoped values across API boundaries and between processes.

Low level client

On the low level dealing with the contexts is identical to native approach:
client := &gosip.SPClient{AuthCnfg: auth}
var req *http.Request
// Initiate API request
// ...
req = req.WithContext(context.Background()) // <- pass a context
resp, err := client.Execute(req)
if err != nil {
fmt.Printf("Unable to request api: %v", err)
return
}

HTTP Client

While using HTTPClient, context is defined together with request config.
spClient := api.NewHTTPClient(&gosip.SPClient{AuthCnfg: auth})
endpoint := auth.GetSiteURL() + "/_api/web?$select=Title"
reqConf := &api.RequestConfig{
Context: context.Background(), // <- pass a context
}
data, err := spClient.Get(endpoint, reqConf)
if err != nil {
log.Fatalf("%v\n", err)
}
// spClient.Post(endpoint, body, reqConf) // generic POST
// generic DELETE helper crafts "X-Http-Method"="DELETE" header
// spClient.Delete(endpoint, reqConf)
// generic UPDATE helper crafts "X-Http-Method"="MERGE" header
// spClient.Update(endpoint, body, reqConf)
// CSOM helper (client.svc/ProcessQuery)
// spClient.ProcessQuery(endpoint, body, reqConf)

Fluent API

With Fluent API, context is managed in the same way as in the previous example with the only difference how it is chained to fluent syntax.
config := &api.RequestConfig{
Context: context.Background(), // <- pass a context
}
sp := api.NewSP(client).Conf(config)
data, err := sp.Web().Lists().Select("Id,Title").Get()
if err != nil {
log.Fatalln(err)
}
Conf method can be used almost on any hierarchy level. It's inherited with capability to redefine.
Export as PDF
Copy link
On this page
Low level client
HTTP Client
Fluent API