360 Secure SkillHub
360 安全技能中心

go-render-api

提供 Render 公共 REST API 的非官方 Go 客户端(模块路径以 go-render-api 结尾)使用说明:涵盖客户端创建、Bearer API 密钥鉴权、游标分页、按状态字段解码响应,以及服务、部署、环境变量、Postgres 等资源操作,并提醒会变更线上基础设施的端点需用户明确要求后再调用。

psyb0t
psyb0t
热度 29.59
最近更新 2026-10-18 03:29:08
分类:开发依赖:代码执行 / 读写文件 / 第三方 API应用场景:API 集成 / DevOps / 代码生成

安装技能

复制下面的话术发给你的 Agent,它会通过 secure-skills 检索并安装该技能。

执行命令安装此 skill: npx secure-skills-cli add psyb0t/go-render-api
Metadata
name
go-render-api
description
Unofficial Go client for the Render public REST API, generated with oapi-codegen. Package render (github.com/psyb0t/go-render-api) has render.NewClientWithResponses, which returns a client with one typed method per endpoint (services, deploys, env vars, Postgres, Key Value, custom domains, jobs and more). Auth is a bearer API key set through render.WithRequestEditorFn, list endpoints page with cursors, and responses decode into JSON200 and per-status error fields. Use when Go code needs to call the Render API or already imports go-render-api.
license
MIT
homepage
https://github.com/psyb0t/go-render-api
user-invocable
true
metadata
{"openclaw":{"emoji":"☁️","requires":{"bins":["go"]}}}
permissions
{"filesystem":"Guides edits to the Go source of the current project. The library reads and writes no files.","shell":"The Go toolchain (`go get`, `go build`, `go test`) to add and compile the dependency.","network":"HTTPS to the Render API at api.render.com, and `go get` to your Go module proxy."}

go-render-api

Typed Go client for the Render API. Every endpoint in Render's OpenAPI document is a method on ClientWithResponses.

For install, client options, more operations, paging and response handling, see references/setup.md.

Security & safety

  • Read the API key from an environment variable such as RENDER_API_KEY. Never hardcode it, commit it or log it, and never print request headers.
  • Requests go only to the base URL you pass, https://api.render.com/v1.
  • Deploy, suspend, scale, update and delete endpoints change live infrastructure. Call them only on services the user named and only when the user asked for that action.

When to use

  • Go code needs to list or inspect Render services, trigger or list deploys, or manage other Render resources.
  • The project already imports github.com/psyb0t/go-render-api.

When NOT to use

  • A one-off change in the Render Dashboard or with the Render CLI is enough.
  • The code is not Go.

Finding endpoints and types

The examples below cover a few calls. Every operation in the spec has a generated method, and the spec's descriptions are on them as Go doc comments. Look names and fields up instead of guessing. After go get github.com/psyb0t/go-render-api, from inside your module:

go doc github.com/psyb0t/go-render-api ClientWithResponsesInterface  # every endpoint method
go doc github.com/psyb0t/go-render-api ListServicesParams            # one method, params type or model
go doc -all github.com/psyb0t/go-render-api                          # the whole package

The same documentation is at https://pkg.go.dev/github.com/psyb0t/go-render-api.

Method names come from the spec's operation IDs. <OperationId>WithResponse takes the context, then the path parameters in order, then *<OperationId>Params when the operation has query or header parameters, then the request body when it has one. The JSON200 field (or JSON201 and so on, per declared status) holds the decoded body; it is nil for any other status. The package name is render while the module path ends in go-render-api, so import it as render "github.com/psyb0t/go-render-api".

Usage

import (
	"context"
	"fmt"
	"net/http"
	"os"

	render "github.com/psyb0t/go-render-api"
)

auth := render.WithRequestEditorFn(
	func(_ context.Context, req *http.Request) error {
		req.Header.Set(
			"Authorization",
			"Bearer "+os.Getenv("RENDER_API_KEY"),
		)

		return nil
	},
)

client, err := render.NewClientWithResponses(
	"https://api.render.com/v1",
	auth,
)
if err != nil {
	return err
}

limit := render.LimitParam(20)

res, err := client.ListServicesWithResponse(
	ctx,
	&render.ListServicesParams{Limit: &limit},
)
if err != nil {
	return err // transport failure
}

if res.JSON200 == nil {
	return fmt.Errorf("render: status %d", res.StatusCode())
}

for _, item := range *res.JSON200 {
	fmt.Println(item.Service.Id, item.Service.Name, item.Cursor)
}

Listing deploys of one service:

deploys, err := client.ListDeploysWithResponse(ctx, serviceID, nil)
if err != nil {
	return err
}

if deploys.JSON200 != nil {
	for _, item := range *deploys.JSON200 {
		if item.Deploy != nil && item.Deploy.Status != nil {
			fmt.Println(item.Deploy.Id, *item.Deploy.Status)
		}
	}
}

A method returns an error only when the request could not be sent or the body could not be decoded. An API error is a normal response: check StatusCode() and read the matching field, such as JSON401, a *render.Error with optional Message, Code and Id.