feishu

package module
v1.0.0-beta.6 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 16, 2020 License: Apache-2.0 Imports: 15 Imported by: 0

README

ylck/feishu

A fast feishu development sdk written in Golang

GoDoc Go Report Card

快速开始 & demo

go get github.com/ylck/feishu
// 创建应用
App = feishu.NewApp(feishu.AppConfig{
    AppId:             "APPID",
    AppSecret:         "SECRET",
})

// 调用 api 接口
params = url.Values{}
params.Add("calendarId", "10086")
resp, err := calendar.GetCalendarById(App, params)
fmt.Println(string(resp), err)

完整演示项目:

https://github.com/ylck/feishu-demo

API 列表:

doc/apilist.md

架构设计

sdk

框架特点

快速

「快」作为框架设计的核心理念,体现在方方面面:

  • 使用 Go 语言,开发快、编译快、部署快、运行快,轻松服务海量用户
  • 丰富的文档演示代码 ,快速上手,5 分钟即可搭建一个完整地飞书 App
  • 独立清晰的模块划分,快速熟悉整个框架,没有意外,一切都是你期望的样子
  • 甚至连框架自身的大部分代码也是自动生成的,维护更新快到超乎想象
符合直觉

作为第三方开发框架,尽可能贴合官方文档和设计,不引入新的概念,不给开发者添加学习负担

简洁而不过度封装

作为具体业务和飞书服务的中间层,专注于通道的角色:帮业务把配置/材料投递到飞书,将飞书响应/推送透传回业务

至于 AccessToken 管理 和 消息加解密处理,框架内部完成得干净利落,开发者甚至觉察不到存在

官方文档就是最好的文档

每个接口的注释都附带官方文档的链接,让你随时翻阅,省时省心

完备的单元测试

100% 覆盖每一个接口,让你每一次调用都信心满满

详细的日志

每个关键环节都为你完整记录,Debug 倍轻松,你可以自由定义日志输出,甚至可以关闭日志

活跃的开发者社区

ylck 是一套丰富的 Go 服务开发框架,支持飞书、微信等服务,拥有庞大的开发者用户群体

你遇到的所有问题几乎都可以在社区找到解决方案

参与贡献

欢迎提交 pull request / issue / 文档,一起让 Golang 开发更快更好!

Faster we go together!

加入开发者交流群

Documentation

Overview

飞书 开放平台 SDK

See: https://open.feishu.cn/

Index

Constants

This section is empty.

Variables

View Source
var FeishuServerUrl = "https://open.larksuite.com"

飞书 api 服务器地址

View Source
var FeishuServerUrl2 = "https://www.feishu.cn"

Functions

This section is empty.

Types

type App

type App struct {
	Config                      AppConfig
	Cache                       cachego.Cache
	GetTenantAccessTokenHandler GetTenantAccessTokenFunc
	GetAppAccessTokenHandler    GetAppAccessTokenFunc
	Client                      Client
	Server                      Server
	Logger                      *log.Logger
}

App 实例

func NewApp

func NewApp(config AppConfig) (app *App)

创建 企业自建应用 实例

func (*App) GetAppAccessToken

func (app *App) GetAppAccessToken() (accessToken string, err error)

从 应用 实例 的 AppAccessToken 管理器 获取 access_token

如果没有 access_token 或者 已过期,那么刷新

func (*App) GetTenantAccessToken

func (app *App) GetTenantAccessToken() (accessToken string, err error)

从 应用 实例 的 TenantAccessToken 管理器 获取 access_token

如果没有 access_token 或者 已过期,那么刷新

func (*App) SetCacheDriver

func (app *App) SetCacheDriver(driver cachego.Cache)

SetCacheDriver 设置 access_token 缓存器 默认为文件缓存:目录 os.TempDir()

驱动接口类型 为 cachego.Cache

func (*App) SetGetAppAccessTokenHandler

func (app *App) SetGetAppAccessTokenHandler(f GetAppAccessTokenFunc)

SetGetAppAccessTokenHandler 设置 AppAccessToken 获取方法。默认 从本地缓存获取(过期从接口刷新)

如果有多实例服务,可以设置为 Redis 或 RPC 等中控服务器 获取 就可以避免 TenantAccessToken 刷新冲突

func (*App) SetGetTenantAccessTokenHandler

func (app *App) SetGetTenantAccessTokenHandler(f GetTenantAccessTokenFunc)

SetGetTenantAccessTokenHandler 设置 TenantAccessToken 获取方法。默认 从本地缓存获取(过期从接口刷新)

如果有多实例服务,可以设置为 Redis 或 RPC 等中控服务器 获取 就可以避免 TenantAccessToken 刷新冲突

func (*App) SetLogger

func (app *App) SetLogger(logger *log.Logger)

SetLogger 日志记录 默认输出到 os.Stdout

可以新建 logger 输出到指定文件

如果不想开启日志,可以 SetLogger(nil)

type AppConfig

type AppConfig struct {
	AppId             string
	AppSecret         string
	VerificationToken string
	EncryptKey        string
}

应用 配置

type Client

type Client struct {
	Ctx *App
}

HttpClient 用于向 接口发送请求

func (*Client) HTTPDelete

func (client *Client) HTTPDelete(url string, header http.Header) (resp []byte, err error)

HTTPDelete DELETE 请求

func (*Client) HTTPDo

func (client *Client) HTTPDo(req *http.Request) (resp []byte, err error)

HTTPDo 执行 请求

func (*Client) HTTPGet

func (client *Client) HTTPGet(url string, header http.Header) (resp []byte, err error)

HTTPGet GET 请求

func (*Client) HTTPPatch

func (client *Client) HTTPPatch(url string, payload io.Reader, header http.Header) (resp []byte, err error)

HTTPPatch PATCH 请求

func (*Client) HTTPPost

func (client *Client) HTTPPost(url string, payload io.Reader, header http.Header) (resp []byte, err error)

HTTPPost POST 请求

func (*Client) HTTPPut

func (client *Client) HTTPPut(url string, payload io.Reader, header http.Header) (resp []byte, err error)

HTTPut PUT 请求

type GetAppAccessTokenFunc

type GetAppAccessTokenFunc func() (accessToken string, err error)

GetAppAccessTokenFunc 获取 app_access_token 方法接口

type GetAppTicketFunc

type GetAppTicketFunc func() (appTicket string, err error)

type GetTenantAccessTokenFunc

type GetTenantAccessTokenFunc func() (accessToken string, err error)

GetTenantAccessTokenFunc 获取 tenant_access_token 方法接口

type PublicApp

type PublicApp struct {
	*App
	TenantKey               string
	GetAppTicketHandler     GetAppTicketFunc
	ReceiveAppTicketHandler ReceiveAppTicketFunc
}

func NewPublicApp

func NewPublicApp(config AppConfig, tenantKey string) (publicApp *PublicApp)

应用市场应用

func (*PublicApp) GetAppAccessToken

func (ctx *PublicApp) GetAppAccessToken() (accessToken string, err error)

从 应用 实例 的 AppAccessToken 管理器 获取 access_token

如果没有 access_token 或者 已过期,那么刷新

获得新的 access_token 后 过期时间设置为 0.9 * expiresIn 提供一定冗余

func (*PublicApp) GetAppTicket

func (ctx *PublicApp) GetAppTicket() (appTicket string, err error)

GetAppTicket 获取 AppTicket

func (*PublicApp) GetTenantAccessToken

func (ctx *PublicApp) GetTenantAccessToken() (accessToken string, err error)

从 应用 实例 的 TenantAccessToken 管理器 获取 access_token

如果没有 access_token 或者 已过期,那么刷新

func (*PublicApp) ReceiveAppTicket

func (ctx *PublicApp) ReceiveAppTicket(ticket string) (err error)

ReceiveAppTicket 接收 app_ticket 并 存储到 缓存

func (*PublicApp) RequestAppTicket

func (ctx *PublicApp) RequestAppTicket()

RequestAppTicket 请求重新发送 app_ticket

type ReceiveAppTicketFunc

type ReceiveAppTicketFunc func(appTicket string) (err error)

type Server

type Server struct {
	Ctx *App
}

响应 推送事件 的服务器

func (*Server) Challenge

func (s *Server) Challenge(writer http.ResponseWriter, event event_types.EventChallenge)

Challenge 服务器接口校验

func (*Server) ParseEvent

func (s *Server) ParseEvent(request *http.Request) (event interface{}, err error)

ParseEvent 解析 推送过来的 事件

Directories

Path Synopsis
apis
app/app_manage
Package app_manage 应用信息/应用管理
Package app_manage 应用信息/应用管理
app/app_store
Package app_store 应用信息/应用商店
Package app_store 应用信息/应用商店
authen
网页授权流程分为四步: 整体流程 第一步: 网页后端发现用户未登录,请求身份验证; 第二步: 用户登录后,开放平台生成登录预授权码,302跳转至重定向地址; 第三步: 网页后端调用获取登录用户身份校验登录预授权码合法性,获取到用户身份; 第四步: 如需其他用户信息,网页后端可调用获取用户信息(身份验证)。
网页授权流程分为四步: 整体流程 第一步: 网页后端发现用户未登录,请求身份验证; 第二步: 用户登录后,开放平台生成登录预授权码,302跳转至重定向地址; 第三步: 网页后端调用获取登录用户身份校验登录预授权码合法性,获取到用户身份; 第四步: 如需其他用户信息,网页后端可调用获取用户信息(身份验证)。
bot/bot_manage
Package bot_manage 机器人/机器人信息和管理
Package bot_manage 机器人/机器人信息和管理
bot/group_manage
Package group_manage 机器人/群信息和群管理
Package group_manage 机器人/群信息和群管理
capabilities/approval
Package approval 审批
Package approval 审批
capabilities/calendar
Package calendar 日历
Package calendar 日历
capabilities/document/comment
Package comment 云文档/评论
Package comment 云文档/评论
capabilities/document/docs
Package docs 云文档/docs
Package docs 云文档/docs
capabilities/document/file
Package file 云文档/file
Package file 云文档/file
capabilities/document/folder
Package folder 云文档/folder
Package folder 云文档/folder
capabilities/document/permission
Package permission 云文档/permission
Package permission 云文档/permission
capabilities/document/platform
Package platform 云文档/platform
Package platform 云文档/platform
capabilities/document/sheets
Package sheets 云文档/sheets
Package sheets 云文档/sheets
capabilities/meeting_room
Package meeting_room 会议室
Package meeting_room 会议室
contact
Package contact 获取企业自定义用户属性配置
Package contact 获取企业自定义用户属性配置
contact/async_batch
Package async_batch 异步批量接口
Package async_batch 异步批量接口
contact/department
Package department 部门管理
Package department 部门管理
contact/user
Package user 用户管理
Package user 用户管理
message
Package message 消息
Package message 消息
user_group
Package user_group 用户群组
Package user_group 用户群组
Package test 模拟服务器 测试
Package test 模拟服务器 测试
types

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL