SDK Quick Start
Use the WDM SDK package that matches the WDM distribution you are integrating with. The examples below show the common install shape after downloading a pinned SDK release from Downloads.
Object Operations in Go
After installing the Go SDK, construct a client and call ObjectService.
The client exposes the buf-generated ConnectRPC service stubs directly.
import (
"context"
"log"
"connectrpc.com/connect"
"google.golang.org/protobuf/types/known/timestamppb"
wdmsdk "github.com/raft-tech/raft-wdm-sdk-go"
pb "github.com/raft-tech/raft-wdm-sdk-go/gen/raft/wdm/v1"
svc "github.com/raft-tech/raft-wdm-sdk-go/gen/raft/wdm/v1/service"
)
client, err := wdmsdk.New("https://wdm.example.com",
wdmsdk.WithAPIKey("wdm-key-abc123"),
)
if err != nil {
log.Fatal(err)
}
ctx := context.Background()
Publish an Object
PublishObject is an upsert: a known Id updates that Object, while a new or omitted Id creates one.
objectID := "550e8400-e29b-41d4-a716-446655440000"
_, err = client.ObjectService().PublishObject(ctx, connect.NewRequest(&svc.PublishObjectRequest{
Object: &pb.Object{
Id: objectID,
Name: "TRACK-4721",
Status: pb.ObjectStatus_OBJECT_STATUS_ACTIVE,
Provenance: &pb.ProvenanceRecord{
Name: "radar-feed",
UpdatedAt: timestamppb.Now(),
},
},
}))
if err != nil {
log.Fatal(err)
}
Get an Object
getResp, err := client.ObjectService().GetObject(ctx, connect.NewRequest(&svc.GetObjectRequest{
ObjectId: objectID,
}))
if err != nil {
log.Fatal(err)
}
log.Printf("object: %s", getResp.Msg.GetObject().GetName())
Search Objects
searchResp, err := client.ObjectService().SearchObjects(ctx, connect.NewRequest(&svc.SearchObjectsRequest{
Query: &svc.ObjectQuery{
Statuses: []pb.ObjectStatus{pb.ObjectStatus_OBJECT_STATUS_ACTIVE},
},
PageSize: 50,
}))
if err != nil {
log.Fatal(err)
}
for _, obj := range searchResp.Msg.GetObjects() {
log.Printf("found: %s", obj.GetName())
}
Stream Objects
stream, err := client.ObjectService().StreamObjects(ctx, connect.NewRequest(&svc.StreamObjectsRequest{}))
if err != nil {
log.Fatal(err)
}
defer stream.Close()
for stream.Receive() {
log.Printf("event: %s object: %s",
stream.Msg().GetEventType(), stream.Msg().GetObject().GetName())
}
if err := stream.Err(); err != nil {
log.Printf("stream error: %v", err)
}