mirror of
https://github.com/open-metadata/OpenMetadata.git
synced 2025-07-06 08:37:22 +00:00

* DOCS - Prepare 1.7 Release and 1.8 SNAPSHOT * DOCS - Prepare 1.7 Release and 1.8 SNAPSHOT
223 lines
5.1 KiB
Markdown
223 lines
5.1 KiB
Markdown
---
|
|
title: Go SDK
|
|
slug: /sdk/go
|
|
---
|
|
|
|
# Go SDK
|
|
|
|
We now present a high-level Go API as a gentle wrapper to interact with the OpenMetadata API.
|
|
|
|
The open-source OpenMetadata SDK for Go simplifies provisioning, managing, and using OpenMetadata resources from the Go application code. \
|
|
The OpenMetadata SDK for Go modules build on top of the underlying OpenMetadata REST API, allows you to use those APIs through familiar Go paradigms.
|
|
|
|
You can find the source code for the OpenMetadata libraries in the [GitHub repository](https://github.com/open-metadata/openmetadata-sdk/tree/main/openmetadata-go-client). As an open-source project, contributions are always welcome!
|
|
|
|
You can add the module to your application with the below command
|
|
|
|
```sh
|
|
go get github.com/open-metadata/openmetadata-sdk/openmetadata-go-client
|
|
```
|
|
|
|
## Establish OpenMetadata Server Connection
|
|
|
|
To create OpenMetadata Gateway, you will need to establish a connection with *OpenMetadata Server*. The following inputs will be needed:
|
|
* `BaseURL`: The url on which your instance of OpenMetadata is up and running (include the port if you need to e.g. http://localhost:8585).
|
|
* `APIVersion`: pass an empty string -- this will be `v1` for now.
|
|
* `Retry`: number of time the request should retry if the status code returned is in `RetryCodes`. Use `0` to use the default value
|
|
* `RetryWait`: number of second to wait betwee retries. Pass 0 to use the default value
|
|
* `RetryCodes`: HTTP status that will trigger a retry. Pass `nil` to use the default
|
|
* `AuthTokenMode`: defaults to `Bearer`
|
|
* `AccessToken`: JWT token use to authenticate the request
|
|
|
|
```go
|
|
// main.go
|
|
package main
|
|
|
|
import (
|
|
"github.com/open-metadata/openmetadata-sdk/openmetadata-go-client/pkg/ometa"
|
|
)
|
|
|
|
func main() {
|
|
restConfig := ometa.NewRestConfig(
|
|
"http://localhost:8585",
|
|
"", // APIVersion
|
|
0, // Retry -> defaults to 3
|
|
0, // RetryWait -> defaults to 30 seconds
|
|
nil, // RetryCodes -> defaults to [429, 504]
|
|
"JWTToken",
|
|
)
|
|
}
|
|
```
|
|
|
|
|
|
## Create OpenMetadata Gateway
|
|
|
|
Once the connection details are provided, you can create an OpenMetadata Gateway
|
|
using the following piece of code.
|
|
|
|
```go
|
|
// main.go
|
|
...
|
|
|
|
func main() {
|
|
...
|
|
rest := ometa.NewRest(restConfig)
|
|
}
|
|
```
|
|
|
|
## How to Use APIs Using the Java Client
|
|
Once you have instantiated a `Rest` object you can call any of the 4 methods to perform any kind of operation against OpenMetadata API
|
|
|
|
### `Get` method
|
|
**Method signature**
|
|
```go
|
|
func (rest Rest) Get(
|
|
path string,
|
|
header http.Header,
|
|
extraHeader map[string][]string,
|
|
queryParams map[string]string) (map[string]any, error)
|
|
```
|
|
|
|
**Example**
|
|
```go
|
|
// main.go
|
|
...
|
|
func main() {
|
|
...
|
|
path := "tables"
|
|
body, err := rest.Get(path, nil, nil, nil)
|
|
}
|
|
```
|
|
|
|
|
|
### `Post` method
|
|
**Method signature**
|
|
```go
|
|
func (rest Rest) Post(
|
|
path string,
|
|
data map[string]interface{},
|
|
header http.Header,
|
|
extraHeader map[string][]string,
|
|
queryParams map[string]string) (map[string]any, error)
|
|
```
|
|
|
|
**Example**
|
|
```go
|
|
// main.go
|
|
...
|
|
func main() {
|
|
...
|
|
path := "tables"
|
|
data := map[string]interface{}{
|
|
"name": "goClientTestTable",
|
|
"databaseSchema": "sample_data.ecommerce_db.shopify",
|
|
"columns": []map[string]interface{}{
|
|
{
|
|
"name": "columnOne",
|
|
"dataType": "NUMBER",
|
|
},
|
|
{
|
|
"name": "columnTwo",
|
|
"dataType": "NUMBER",
|
|
},
|
|
},
|
|
}
|
|
body, err := rest.Post(path, data, nil, nil, nil)
|
|
}
|
|
```
|
|
|
|
### `Put` method
|
|
**Method signature**
|
|
```go
|
|
func (rest Rest) Put(
|
|
path string,
|
|
data map[string]interface{},
|
|
header http.Header,
|
|
extraHeader map[string][]string,
|
|
queryParams map[string]string) (map[string]any, error)
|
|
```
|
|
|
|
**Example**
|
|
```go
|
|
// main.go
|
|
...
|
|
func main() {
|
|
...
|
|
path := "tables"
|
|
data := map[string]interface{}{
|
|
"name": "goClientTestTable",
|
|
"databaseSchema": "sample_data.ecommerce_db.shopify",
|
|
"columns": []map[string]interface{}{
|
|
{
|
|
"name": "columnOne",
|
|
"dataType": "NUMBER",
|
|
},
|
|
{
|
|
"name": "columnTwo",
|
|
"dataType": "NUMBER",
|
|
},
|
|
{
|
|
"name": "columnThree",
|
|
"dataType": "NUMBER",
|
|
},
|
|
},
|
|
}
|
|
body, err := rest.Put(path, data, nil, nil, nil)
|
|
}
|
|
```
|
|
|
|
### `Patch` method
|
|
**Method signature**
|
|
```go
|
|
func (rest Rest) Patch(
|
|
path string,
|
|
data []map[string]interface{},
|
|
header http.Header,
|
|
extraHeader map[string][]string,
|
|
queryParams map[string]string) (map[string]any, error)
|
|
```
|
|
|
|
**Example**
|
|
```go
|
|
// main.go
|
|
...
|
|
func main() {
|
|
...
|
|
path := "tables"
|
|
patchPath := fmt.Sprintf("tables/%s", id)
|
|
data := []map[string]interface{}{
|
|
{
|
|
"op": "add",
|
|
"path": "/description",
|
|
"value": "This is a test table",
|
|
},
|
|
}
|
|
body, err := rest.Patch(path, data, nil, nil, nil)
|
|
}
|
|
```
|
|
|
|
### `Delete` method
|
|
**Method signature**
|
|
```go
|
|
func (rest Rest) Delete(
|
|
path string,
|
|
header http.Header,
|
|
extraHeader map[string][]string,
|
|
queryParams map[string]string) (map[string]any, error)
|
|
```
|
|
|
|
**Example**
|
|
```go
|
|
// main.go
|
|
...
|
|
func main() {
|
|
...
|
|
path := fmt.Sprintf("tables/%s", id)
|
|
queryParams := map[string]string{
|
|
"hardDelete": "true",
|
|
"recursive": "true",
|
|
}
|
|
rest.Delete(path, nil, nil, queryParams)
|
|
}
|
|
```
|