`
cloudxman
  • 浏览: 36004 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

[设计]-OpenAPI中的callback机制

阅读更多
OpenAPI提供给外部网站访问,为了便于讨论,我们把接口提供方定义为Resource Provider,简称RP,使用方定义为Caller。 通常而言,我们在OpenAPI的设计原则中,要求Caller到RP是必须是单向访问的,只有这样,才能解除两个网站的双向耦合。但是实际中,有时候还真存在需求,不得不让RP访问到Caller,我们把这个情况叫Callback。我想举两个例子来说明这种情况。 网上银行支付 做过支付宝支付的都清楚,商家扣款必须把调用发到支付宝(RP),但是这笔支付究竟是否成功,需要支付宝回调来确认,以及支持成功后最终返回到一个支付成功的展示界面。在这个场景中,就用到了callback机制。 跨网站的好友确认 网站A和网站B深度合作,网站A的用户可以加网站B的用户为好友。假设网站A发起一个到网站B OpenAPI的call, call的url大致是:api.do?method=addFriend&a_uid=1234&b_uid=4321。 但是,我们知道,通常一个网站的加好友是必须经过对方确认的,这样麻烦就来了。这个请求发送后,并不知道这个b_uid是否接受,也不知道什么时候接受?所以,就必须设计一个callback的机制,让RP回调caller,解决这类异步的确认问题。 好了,有了上面两个引子,我们可以讨论OpenAPI的callback机制了。 在编程语言中,其实很早就存在callback的做法了。比如在C语言中,通常是把一个函数指针作为参数传入到某个method内部,只要确保这个函数指针的生命周期在回调的时候还存在,即可执行。对于OpenAPI其实也一样。我们可以设想,在OpenAPI的传入参数中引入callback_url, 来让RP回调.   值得补充的是,光有一个callback_url 参数是不太够的。为什么呢? method + callback_url 只能表达一个method对应一个callback,  如果一个method有多个callback呢,就需要额外的参数来表达。所以,建议可以在引入一个 callback_type 的参数。RP在拿到(method, callback_type)后可以根据callback_type来判断是什么情况,从而进行不同的处理,然后进行回调。 很多时候,RP并不会在caller调用后立即callback,而是需要等待内部某些事件发生的时候才callback。这样RP内部就需要把这些callback需求存储下来。 接下来讨论一个问题,callback_url如果需要一些参数怎么办?比如在加好友的这个例子中,B网站的用户确认好友关系后,还需要在发起callback_url调用时把a_uid和b_uid告诉网站A.  当然,这就回到了网站A的OpenAPI规范了。这个问题很好解决,只是引申出来,对于OpenAPI的规划,并不是接口包装那么容易,需要考虑到很多因素。也反映了我们为什么一直提到的一个设计原则:尽量单向依赖

分享到:
评论

相关推荐

    aliyun-openapi-java-sdk-master.zip

    这个名为"aliyun-openapi-java-sdk-master.zip"的压缩包包含了完整的Java SDK源代码,使得开发者可以方便地集成到自己的Java应用中,进行云计算资源的管理和操作。 首先,我们要了解的是SDK的基本概念。SDK,即...

    海康威视iVMS-8700平台SDKV 2.9.2 HTTP-OpenAPI使用说明书

    海康威视iVMS-8700平台SDKV 2.9.2 HTTP-OpenAPI使用说明书

    Api-hapi-openapi.zip

    Api-hapi-openapi.zip,使用openapi(以前是swagger)2.0和hapi.hapi-openapi构建设计驱动的api,一个api可以被认为是多个软件设备之间通信的指导手册。例如,api可用于web应用程序之间的数据库通信。通过提取实现并将...

    agent-openapi-3.0.jar.zip

    在解压"agent-openapi-3.0.jar.zip"后,将"agent-openapi-3.0.jar"添加到项目的类路径中,是使其生效的关键步骤。 总结 "agent-openapi-3.0.jar.zip"是一个融合了Java Agent技术和OpenAPI概念的组件,它可能为...

    springdoc-openapi:具有spring-boot的OpenAPI 3库

    springdoc-openapi Java库有助于使用Spring Boot项目自动生成API文档。 springdoc-openapi的工作原理是在运行时检查应用程序以基于Spring配置,类结构和各种注释来推断API语义。 该库会自动以JSON / YAML和HTML格式...

    aliyun-openapi-php-sdk.zip

    aliyun-openapi-php-sdk 是阿里云官方为 PHP 开发者提供的阿里云 Open API SDK。示例:include_once '../aliyun-php-sdk-core/Config.php'; use Ecs\Request\V20140526 as Ecs; $iClientProfile = Default...

    Api-kin-openapi.zip

    Api-kin-openapi.zip,openapi 3.0go实现(解析、转换、验证等)简介,一个api可以被认为是多个软件设备之间通信的指导手册。例如,api可用于web应用程序之间的数据库通信。通过提取实现并将数据放弃到对象中,api简化...

    PyPI 官网下载 | django-openapi-0.1.1.9.tar.gz

    标题中的"PyPI 官网下载 | django-openapi-0.1.1.9.tar.gz"指的是Python的包管理器PyPI(Python Package Index)上发布的开源项目django-openapi的一个特定版本0.1.1.9,这个版本被打包成了tar.gz格式的压缩文件。...

    NCC-OpenAPI示例文档.pdf

    ### NCC-OpenAPI 示例文档知识点解析 #### 一、UAP与Restlet框架的集成 **概述** NCC-OpenAPI示例文档详细介绍了如何通过UAP平台与Restlet框架进行集成来构建RESTful服务。UAP(Unified Application Platform)...

    Laravel开发-laravel-openapi-schema-generator

    在实际开发过程中,结合OpenAPI规范和`laravel-openapi-schema-generator`,开发者能够实现快速、规范的API开发流程。同时,由于OpenAPI与各种工具和平台兼容,如Postman、Swagger UI等,生成的文档可以帮助测试人员...

    Laravel开发-laravel-openapi-consumer

    在本文中,我们将深入探讨如何在Laravel框架中使用`laravel-openapi-consumer`组件,以便有效地消费遵循OpenAPI规范的外部API。OpenAPI,以前称为Swagger,是一种广泛采用的标准,用于描述RESTful API的接口,使得...

    PyPI 官网下载 | sphinxcontrib-openapi-0.3.0.tar.gz

    标题中的"PyPI 官网下载 | sphinxcontrib-openapi-0.3.0.tar.gz"指的是Python的包管理器PyPI(Python Package Index)上的一款名为`sphinxcontrib-openapi`的软件包,版本为0.3.0,其源代码以tar.gz格式提供。...

    Python库 | pydantic-openapi-helper-0.2.3.tar.gz

    综上所述,`pydantic-openapi-helper`是Python后端开发中的一个实用工具,它将Pydantic的强大力量与OpenAPI的标准化接口描述相结合,为开发者带来高效且可靠的API开发体验。通过使用此库,开发者可以更专注于业务...

    protoc-gen-openapi:openapi协议

    适用与kratos-go的protobuf生成openapi3文档扩展ps 暂不支持map结构,map定义会返回一个空的objectgo get -u github.... --proto_path=./third_party --openapi_out=paths=source_relative:. test.proto

    python3 alibabacloud-tea-openapi-0.3.8

    1. 安装与配置:安装Alibabacloud-Tea-OpenAPI-0.3.8包,通常使用pip工具,然后在Odoo配置文件中设置阿里云的访问密钥和服务端点。 2. 异常处理:在调用阿里云API时,需要捕获并处理可能出现的异常,如网络错误、...

    PyPI 官网下载 | bmlx-openapi-client-0.0.90.8.tar.gz

    在云原生环境中,bmlx-openapi-client可能被设计为与Kubernetes、Docker等容器化技术配合使用,实现灵活、可扩展的服务部署和管理。 在使用bmlx-openapi-client时,开发者需要首先安装这个库,可以利用Python的pip...

    springdoc-openapi-gradle-plugin:带有Spring-boot的OpenAPI 3库

    引入springdoc-openapi-gradle-plugin 用于springdoc-openapi的Gradle插件。 这个插件使您可以从Gradle构建中为Spring Boot应用程序生成OpenAPI 3规范。 该插件在springdoc-openapi-core的帮助下完成了此任务。相容...

    springdoc-openapi-demos:带有Spring-boot的OpenAPI 3演示

    在`springdoc-openapi-demos`项目中,包含了多个示例,展示了如何定义不同的API端点和响应。例如,通过`@OpenAPIDefinition`和`@Info`注解来定义全局信息,`@Operation`和`@ApiParam`注解用于标记方法和参数,`@...

Global site tag (gtag.js) - Google Analytics