Skip to content

openapi/openapi-go-sdk

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

8 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Openapi SDK for Go

Openapi® client for Go

The perfect starting point to integrate Openapi® within your Go project

Build Status Go Report Card Go Reference License
Linux Foundation Member

Overview

A minimal and agnostic Go SDK for Openapi, providing only the core HTTP primitives needed to interact with any Openapi service.

Pre-requisites

Before using the Openapi Go Client, you will need an account at Openapi and an API key to the sandbox and/or production environment.

Features

  • Agnostic Design: No API-specific classes, works with any Openapi service
  • Minimal Dependencies: Only requires Go 1.19+
  • OAuth Support: Built-in OAuth client for token management
  • HTTP Primitives: GET, POST, PUT, DELETE and other HTTP methods
  • Clean Interface: Simple and idiomatic Go API

What you can do

With the Openapi Go Client, you can easily interact with a variety of services in the Openapi Marketplace. For example, you can:

  • 📩 Send SMS messages with delivery reports and custom sender IDs
  • 💸 Process bills and payments in real time via API
  • 🧾 Send electronic invoices securely to the Italian Revenue Agency
  • 📄 Generate PDFs from HTML content, including JavaScript rendering
  • ✉️ Manage certified emails and legal communications via Italian Legalmail

For a complete list of all available services, check out the Openapi Marketplace 🌐

Installation

Add the SDK to your project:

go get github.com/openapi/openapi-go-sdk

Then import the client package:

import "github.com/openapi/openapi-go-sdk/pkg/client"

Usage

Token generation

Use OauthClient to authenticate with your credentials and generate a scoped access token. The test flag switches between the sandbox (true) and production (false) OAuth endpoint.

package main

import (
	"context"
	"encoding/json"
	"fmt"
	"log"

	"github.com/openapi/openapi-go-sdk/pkg/client"
)

func main() {
	ctx := context.Background()

	oauthClient := client.NewOauthClient("<your_username>", "<your_apikey>", true)

	scopes := []string{
		"GET:test.imprese.openapi.it/advance",
		"POST:test.postontarget.com/fields/country",
	}
	resp, err := oauthClient.CreateToken(ctx, scopes, 3600)
	if err != nil {
		log.Fatal(err)
	}

	tokenResponse := struct {
		Scopes []string `json:"scopes"`
		Token  string   `json:"token"`
	}{}
	if err := json.Unmarshal([]byte(resp), &tokenResponse); err != nil {
		log.Fatal(err)
	}

	fmt.Printf("token: %s\n", tokenResponse.Token)
}

Making API calls

Use Client with the token obtained above to call any Openapi service. Pass the base URL and endpoint separately so the client can correctly attach query parameters.

package main

import (
	"bytes"
	"context"
	"encoding/json"
	"fmt"
	"log"

	"github.com/openapi/openapi-go-sdk/pkg/client"
)

func main() {
	ctx := context.Background()
	apiClient := client.NewClient("<your_access_token>")

	// GET with query parameters
	params := map[string]string{
		"denominazione": "altravia",
		"provincia":     "RM",
		"codice_ateco":  "6201",
	}
	result, err := apiClient.Request(ctx, "GET", "https://test.imprese.openapi.it", "/advance", nil, params)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Println(result)

	// POST with a JSON payload
	payload := struct {
		Limit int `json:"limit"`
		Query struct {
			CountryCode string `json:"country_code"`
		} `json:"query"`
	}{
		Limit: 10,
		Query: struct {
			CountryCode string `json:"country_code"`
		}{CountryCode: "IT"},
	}
	var buf bytes.Buffer
	if err := json.NewEncoder(&buf).Encode(payload); err != nil {
		log.Fatal(err)
	}
	result, err = apiClient.Request(ctx, "POST", "https://test.postontarget.com", "/fields/country", &buf, nil)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Println(result)
}

More complete examples are available in the examples/ directory.

Testing

The SDK ships with a suite of unit tests that use net/http/httptest — no real network calls, no credentials needed.

Run the full suite:

go test ./...

Run with verbose output to see each test case:

go test -v ./pkg/client/...

Run a single test by name:

go test -v -run TestCreateToken ./pkg/client/...

Contributing

Contributions are always welcome! Whether you want to report bugs, suggest new features, improve documentation, or contribute code, your help is appreciated.

See docs/contributing.md for detailed instructions on how to get started. Please make sure to follow this project's docs/code-of-conduct.md to help maintain a welcoming and collaborative environment.

Authors

Meet the project authors:

Partners

Meet our partners using Openapi or contributing to this SDK:

Our Commitments

We believe in open source and we act on that belief. We became Silver Members of the Linux Foundation because we wanted to formally support the ecosystem we build on every day. Open standards, open collaboration, and open governance are part of how we work and how we think about software.

License

This project is licensed under the MIT License.

The MIT License is a permissive open-source license that allows you to freely use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the software, provided that the original copyright notice and this permission notice are included in all copies or substantial portions of the software.

In short, you are free to use this SDK in your personal, academic, or commercial projects, with minimal restrictions. The project is provided "as-is", without any warranty of any kind, either expressed or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose, and non-infringement.

For more details, see the full license text at the MIT License page.