ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Ory Hydra TokenPaginationRequestParameters:OAuth2.1 管理 API 的令牌分页模型与 Go 客户端实践

Ory Hydra TokenPaginationRequestParameters:OAuth2.1 管理 API 的令牌分页模型与 Go 客户端实践 认证鉴权后端【免费下载链接】hydraInternet-scale OpenID Certified™ OpenID Connect and OAuth2.1 provider that integrates with your user management through headless APIs. Solve OIDC/OAuth2 user cases over night. Consume as a service on Ory Network or self-host. Trusted by OpenAI and many others for scale and security. Written in Go.项目地址https://gitcode.com/gh_mirrors/hydra2/hydra点击查看免费下载导读TokenPaginationRequestParameters是 Ory Hydra开源 OAuth2.1 / OpenID Connect 提供商HTTP 客户端中负责令牌Token游标分页的核心请求模型管理 API 的GET /admin/clients、GET /admin/oauth2/auth/sessions/consent等列表接口都依赖它返回海量记录。通过阅读本文你将掌握page_size与page_token两个参数的语义与默认值、其底层 Go SDK 的构造与访问方法、Link响应头携带的first/next/prev/last分页链接解析方式并能在自己的代码中实现健壮的游标翻页循环。一、模型定位为什么 Hydra 需要令牌分页Ory Hydra 是使用 Go 编写、面向 Internet 规模的 OAuth2.1 / OIDC 提供商管理接口需要列出 OAuth2 客户端Client、同意会话Consent Session等大规模数据集合。传统基于offset的分页在数据不断写入时会出现重复或遗漏因此 Hydra 采用游标token分页服务端返回一个不透明游标客户端携带它请求下一批数据保证数据一致性。该模型由 OpenAPI Generator 从internal/httpclient/api/openapi.yaml自动生成源码位于 internal/httpclient/model_token_pagination_request_parameters.go模型文档为 internal/httpclient/docs/TokenPaginationRequestParameters.md。二、属性详解page_size 与 page_token模型仅包含两个可选字段均使用指针类型以区分未设置与零值。名称类型说明默认值PageSizePointer toint64每页返回的条目数Items per Page250PageTokenPointer tostring下一页游标Next Page Token由上一页响应的Link头提供无不设置即从第一页开始对应 JSON 字段为page_size与page_token序列化时若字段为 nil 则被省略omitempty。源码中可验证其定义与默认值// internal/httpclient/model_token_pagination_request_parameters.go type TokenPaginationRequestParameters struct { PageSize *int64 json:page_size,omitempty PageToken *string json:page_token,omitempty }两个构造函数都会把PageSize预设为250func NewTokenPaginationRequestParameters() *TokenPaginationRequestParameters { this : TokenPaginationRequestParameters{} var pageSize int64 250 this.PageSize pageSize return this }使用要点不传page_token从第一页开始遍历不传page_size使用默认值 250 条/页游标由服务端生成、对客户端不透明不要尝试解析或拼接直接透传上一页Link头中的值即可当数据量较大时建议显式设置较小的page_size避免单次响应体过大。三、构造器与访问器方法速查与所有生成模型一致该类型提供完整的构造与访问方法族源码见 internal/httpclient/model_token_pagination_request_parameters.go方法签名作用NewTokenPaginationRequestParametersfunc NewTokenPaginationRequestParameters() *TokenPaginationRequestParameters实例化并赋默认值保证 API 必需属性被设置NewTokenPaginationRequestParametersWithDefaultsfunc NewTokenPaginationRequestParametersWithDefaults() *TokenPaginationRequestParameters仅赋默认值不保证必需属性GetPageSizefunc (o *TokenPaginationRequestParameters) GetPageSize() int64返回 PageSize为 nil 时返回零值GetPageSizeOkfunc (o *TokenPaginationRequestParameters) GetPageSizeOk() (*int64, bool)返回字段值与是否已设置的布尔标记SetPageSizefunc (o *TokenPaginationRequestParameters) SetPageSize(v int64)设置 PageSizeHasPageSizefunc (o *TokenPaginationRequestParameters) HasPageSize() bool判断字段是否已被设置GetPageTokenfunc (o *TokenPaginationRequestParameters) GetPageToken() string返回 PageToken为 nil 时返回零值GetPageTokenOkfunc (o *TokenPaginationRequestParameters) GetPageTokenOk() (*string, bool)返回字段值与是否已设置的布尔标记SetPageTokenfunc (o *TokenPaginationRequestParameters) SetPageToken(v string)设置 PageTokenHasPageTokenfunc (o *TokenPaginationRequestParameters) HasPageToken() bool判断字段是否已被设置GetXxxOk系列方法通过IsNil做空指针保护返回值以元组形式同时给出取值与是否已设置是区分字段缺失与字段为 0/空串的推荐写法。此外类型还实现了MarshalJSON/ToMap以及NullableTokenPaginationRequestParameters可空包装类型用于 JSON 序列化场景。四、在管理 API 中的实际调用以 ListOAuth2Clients 为例TokenPaginationRequestParameters在生成客户端中通过 builder 模式展开为每个列表接口的参数方法。以列出 OAuth2 客户端为例实现见 internal/httpclient/api_o_auth2.go// 请求构造builder 模式 func (r ApiListOAuth2ClientsRequest) PageSize(pageSize int64) ApiListOAuth2ClientsRequest func (r ApiListOAuth2ClientsRequest) PageToken(pageToken string) ApiListOAuth2ClientsRequest发送 HTTP 请求时GET /admin/clientsSDK 将两个参数序列化为 URL 查询参数page_size未设置时在客户端侧兜底为 250if r.pageSize ! nil { parameterAddToHeaderOrQuery(localVarQueryParams, page_size, r.pageSize, form, ) } else { var defaultValue int64 250 r.pageSize defaultValue } if r.pageToken ! nil { parameterAddToHeaderOrQuery(localVarQueryParams, page_token, r.pageToken, form, ) }完整的端到端调用示例来自 internal/httpclient/docs/OAuth2API.mdpackage main import ( context fmt os openapiclient github.com/ory/hydra-client-go/v2 ) func main() { pageSize : int64(789) // int64 | 每页条数默认 250可选 pageToken : pageToken_example // string | 下一页游标可选 configuration : openapiclient.NewConfiguration() apiClient : openapiclient.NewAPIClient(configuration) resp, r, err : apiClient.OAuth2API.ListOAuth2Clients(context.Background()). PageSize(pageSize).PageToken(pageToken).Execute() if err ! nil { fmt.Fprintf(os.Stderr, Error when calling OAuth2API.ListOAuth2Clients: %v\n, err) fmt.Fprintf(os.Stderr, Full HTTP response: %v\n, r) } fmt.Fprintf(os.Stdout, Response from OAuth2API.ListOAuth2Clients: %v\n, resp) }除ListOAuth2Clients外GET /admin/oauth2/auth/sessions/consentListOAuth2ConsentSessions等列表接口同样接受page_size/page_token见 internal/httpclient/api_o_auth2.go 与 internal/httpclient/api_o_auth2.go。五、响应侧配套模型Link 头与总数统计翻页信息通过响应头传递客户端配套了三个模型位于 internal/httpclient/docs 目录5.1 TokenPaginationResponseHeaders响应头解析Link头中包含first、next、prev、last四个逗号分隔的相对链接不存在的页如首页的prev、末页的next会被省略。示例格式/clients?page_size5page_token0; relfirst, /clients?page_size5page_token15; relnext, /clients?page_size5page_token5; relprev, /clients?page_size5page_token20; rellastX-Total-Count头则返回集合中的条目总数int64可用于展示总页数或进度。字段定义见 internal/httpclient/model_token_pagination_response_headers.go。5.2 TokenPaginationHeaders 与 TokenPaginationTokenPaginationHeaders更宽松的头解析版本Link与X-Total-Count均以*string承载internal/httpclient/model_token_pagination_headers.goTokenPagination与请求参数同构的通用模型同样包含page_size/page_token两个字段且page_size默认 250internal/httpclient/model_token_pagination.go。六、实战基于游标的完整翻页循环综合请求与响应模型即可实现安全、无重复的翻页逻辑pageSize : int64(100) pageToken : for { resp, r, err : apiClient.OAuth2API.ListOAuth2Clients(context.Background()). PageSize(pageSize). PageToken(pageToken). Execute() if err ! nil { // 处理错误并退出 break } // 处理本页数据 process(resp) // 从 Link 头解析 next 链接获取下一页 page_token linkHeader : r.Header.Get(Link) nextToken, hasNext : parseNextPageToken(linkHeader) if !hasNext { break } pageToken nextToken }其中parseNextPageToken解析Link头中relnext的 URL 并抽取page_token查询参数。判断终止的条件是不再存在next链接而非依赖固定页数因为游标分页下页数可能随并发写入而变化。七、与 Keyset 分页模型的区分仓库中还存在 internal/httpclient/docs/KeysetPaginationRequestParameters.md 模型。两者同为游标类分页TokenPaginationRequestParameters使用page_sizepage_token而KeysetPaginationRequestParameters使用page_sizepage_token之外可能带keyset字段用于需要排序键游标的场景。选择哪个取决于具体 API 接口的 OpenAPI 定义internal/httpclient/api/openapi.yaml使用前请核对目标接口的参数表。八、小结TokenPaginationRequestParameters虽然只有两个字段却是 Hydra 管理 API 大规模数据遍历的基石page_size控制每页规模默认 250建议按数据量显式设置page_token是不透明游标只透传、不解析配合Link响应头中的next链接驱动翻页循环并以X-Total-Count获取总量Go SDK 通过 builder 模式.PageSize().PageToken()将其注入GET /admin/clients等列表请求源码位于 internal/httpclient/api_o_auth2.go模型源码位于 internal/httpclient/model_token_pagination_request_parameters.go。掌握这一模型你就能在任何 Hydra 管理列表接口上写出健壮、可扩展的分页代码。赞分享认证鉴权后端【免费下载链接】hydraInternet-scale OpenID Certified™ OpenID Connect and OAuth2.1 provider that integrates with your user management through headless APIs. Solve OIDC/OAuth2 user cases over night. Consume as a service on Ory Network or self-host. Trusted by OpenAI and many others for scale and security. Written in Go.项目地址https://gitcode.com/gh_mirrors/hydra2/hydra点击查看免费下载相关推荐Ory Hydra 就绪检查ReadinessAPI 与 Go 客户端模型 IsReady200Response 深入解析Ory Hydra 就绪检查ReadinessAPI 与 Go 客户端模型 IsReady200Response 深入解析 本文围绕 Ory Hydra 自认证鉴权后端Ory Hydra 官方 Go API 客户端hydra-client-go完全指南OpenAPI 生成客户端的安装、配置与全部端点速查Ory Hydra 官方 Go API 客户端hydra client go完全指南OpenAPI 生成客户端的安装、配置与全部端点速查 本篇技术指南围绕认证鉴权后端Ory Hydra Go 客户端 JsonWebKeySet 模型全解析JWK 集合的数据结构与 JwkAPI 实战Ory Hydra Go 客户端 JsonWebKeySet 模型全解析JWK 集合的数据结构与 JwkAPI 实战 本篇技术指南聚焦于 Ory Hydra认证鉴权后端上一篇LlamaIndex重排序优化终极指南7种方法提升检索结果相关性下一篇Joplin OneDrive微软云集成实现创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表