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.

Go

tar -xzf wdm-sdk-go-<version>.tar.gz
cd wdm-sdk-go-<version>
go test ./...

Python

python -m venv .venv
source .venv/bin/activate
unzip wdm-sdk-python-<version>.zip

Java

tar -xzf wdm-sdk-java-<version>.tar.gz

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)
}

Compatibility

Each SDK release corresponds to a specific WDM release. If a schema differs from the environment you are targeting, use the SDK release associated with that WDM distribution instead of mixing versions.