Coffrifydocs
⌘K
SDK

SDK Go

Module Go, gestion de contexte et erreurs typées.

Version

Module `github.com/coffrify/coffrify-go` - Go ≥ 1.21. Utilise `net/http` standard, zéro dépendance externe.

Installation

terminal
$ go get github.com/coffrify/coffrify-go
go: added github.com/coffrify/coffrify-go v0.2.0

Client

main.gogo
package main

import (
    "context"
    "fmt"
    "log"
    "os"

    coffrify "github.com/coffrify/coffrify-go"
)

func main() {
    client := coffrify.NewClient(os.Getenv("COFFRIFY_API_KEY"),
        coffrify.WithTimeout(30*time.Second),
        coffrify.WithMaxRetries(2),
    )

    transfer, err := client.Transfers.Create(context.Background(), coffrify.CreateTransferParams{
        Files:     []coffrify.File{{Name: "contrat.pdf", Size: 1_048_576}},
        ExpiresIn: "7d",
    })
    if err != nil {
        log.Fatal(err)
    }

    fmt.Println(transfer.ShortCode)
    fmt.Println(transfer.ShareURL)
}

Upload & finalisation

data, _ := os.ReadFile("contrat.pdf")
req, _ := http.NewRequest(http.MethodPut, transfer.UploadURLs[0], bytes.NewReader(data))
req.Header.Set("Content-Type", "application/pdf")
http.DefaultClient.Do(req)

finalized, err := client.Transfers.Finalize(ctx, transfer.ID)

Gestion des erreurs

var apiErr *coffrify.APIError
var rateLimitErr *coffrify.RateLimitError

if errors.As(err, &rateLimitErr) {
    time.Sleep(time.Duration(rateLimitErr.RetryAfter) * time.Second)
} else if errors.As(err, &apiErr) {
    fmt.Printf("%d %s: %s\n", apiErr.Status, apiErr.Code, apiErr.Message)
}