服务商店介绍
如果您并不擅长将业务产品化,我们建议您将核心业务封装成API接入服务商店; 或者您已经拥有一个很酷的API,我们也建议您接入服务商店。
服务商店针对服务接口特点,提供一套服务计费体系,API 接入后您即可轻松获得收益。
服务商店提供一个多语言SDK生成工具,您只需写好XML描述文档,通过工具即可自动生成 PHP、JAVA、Python、ObjectC、NodeJS 等多语言SDK及使用文档,帮您节省开发成本。
您的API接入服务商店后,即可同步推送到 Sina App Engine 作为SAE平台的扩展服务,供数十万开发者使用!SAE的开发者,使用您提供的服务混搭微博API可以创造出更新奇、有价值的应用,您再也不用为推广API发愁了!
未来,我们还将陆续推出服务商店网站、类似Yum的客户端、服务管理工具;您可以通过服务管理工具,自助提交管理API, 查看统计信息、设置计费、配额等。应用开发者可以通过网站或客户端检索、购买服务、下载SDK;我们还会将服务推送到新浪云计算的其他开发托管平台!
• 计费模式
服务商店支持按请求数量计费和按月租用两种计费方式;每项服务可设置多种计费方式,您可依据服务特性自行定制。
服务商店与服务提供方进行分成,作为服务托管费用按每笔20%比例分成。
1.按请求数量计费
2.按月计费
您可以设定每月租用价格、每月有效请求数量限额、超限每次请求单价。开发者启用服务时先支付一个月租金,若有效请求数量超额,自动扣除开发者账户付费。
若租约到期或超限后虚拟货币不足则服务终止。(月度计算方式为申请日起至次月同期24点截止)
例:计费方式设定
价格 | 限额 | 超额 | |
按次 | 10云豆/次 | - | - |
包月A | 9000云豆/月 | 100次 | 9云豆/次 |
包月B | 800云豆/月 | 1000次 | 9云豆/次 |
全包月 | 500000云豆/月 | 无限 | - |
3.计费选项
1)自动续费 ( 到期自动续费,否则到达阀值前提醒续费 )
2)费用预算 ( 到达阀值提醒 )
3)免费试用周期 ( 最小为1天,不设置上限 )
配额设置
为防止开发者滥用服务资源,您可以按照以下方式,设置请求限制:
按照特定的周期限定API调用的次数。周期:每分钟,每天,每月。服务提供者可自行定制。
例:
周期 | /分 | /天 | /月 | /月 |
请求限制 | 10次 | 100次 | 500次 | 无限制 |
多语言SDK
服务工作原理
工作原理图示
以下图示展示出用户,服务商店和服务提供方的工作流:
工作原理介绍
当您将服务部署在服务商店后,服务商店会自动生成不同语言的sdk供开发者下载,当然您也可以按照sdk标准文档自行编写sdk并上传以供下载。
在工作流中:
- 开发者通过SDK将授权信息(signature)及其他调用信息作为参数通过HEADER向APIBUS发送请求。
- 用户的请求经过APIBUS代理进行权限验证及转发,将用户的调用请求发送给服务API。
- 服务API返回RESPONSE给APIBUS,并在HEADER中带上相应的HTTP CODE码标识是否成功扣费。
- APIBUS根据返回值及状态码进行计费,配额扣减及错误信息的处理。
- 最终APIBUS将RESPONSE返回给用户。
服务调用示例
开发者在使用服务的时候非常的简单,只要将sdk部署在开发环境中,包含基类文件,就可以进行调用。为了达到这样的目的,您需要提供服务的API XML描述文件,由服务商店自动生成SDK,或按以下标准自行创建SDK。
1)调用方法说明:
不论由服务商店自动生成还是自己编写的sdk,调用时都必须遵守APIBUS协议,以http 调用的方式进行,主要是为了数据统计,路由管理和平台安全的考虑。
在调用API时需调用统一代理地址:
http://g.apibus.io
调用的信息通过header进行传递,必需的参数如下:
FetchUrl: _FetchUrl_ 用户想要调用的http接口
TimeStamp: _TimeStamp_ 本次请求的时间戳
AccessKey: _AccessKey_ 应用的AccessKey,需要在服务商店注册获取
Signature: _Signature_ 请求的签名,标识用户身份
调用参数可以用GET方式或POST方式进行传参,参数需要以数组方式(示例post方式传参):
$postdata =array('coodonate'=>$coodonate);
$parameters = array(
"post" => $postdata
);
进行http调用即可:
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_URL, "http://g.apibus.io");
curl_exec($ch);
服务商店借助APIBUS完成正向代理和计费统计,并对HEADER中传送的数据进行验证并转发,完成一次服务请求。
2)签名算法说明:
签名(Signature)作为APIBUS调用的主要参数用以校验用户的有效身份,服务商店规定如下的签名算法规则:
_Signature_ = base64_hmac_sha256(Fetchurl + _Fetchurl_ + Timestamp + _Timestamp_ +AccessKey + _AccessKey_ +SecretKey + _SecretKey_)
服务调用示例代码(php):
const FURL = "http://g.apibus.io/"; //代理地址
$url = "http://test.sae.sina.com.cn/testapi.php"; //实际调用地址
$timestamp = time(); //时间戳
$signature = $this->signature($url, $timestamp); //签名算法
$headers = array( //加入header
"FetchUrl: $url",
"AccessKey: $this->accesskey_",
"TimeStamp: $timestamp",
"Signature: $signature"
);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_URL, FURL);
curl_exec($ch);
API规范
接口规范
URL基本格式
http://域/版本/资源类/接口名称.返回值格式?参数
1.使用小写字母。2.严格按照规定的格式定义API URL。
格式说明
名称 | 说明 |
域 | 允许APIBUS 代理服务器可以直接访问到该域。 如使用代理服务域地址,则需允许 g.apibus.io 访问该域。 |
版本 | 使用版本号区分不用版本的接口。 *只能使用阿拉伯数字作为版本号。 |
资源类 | APIBUS 推荐使用REST 设计和开发方式, 将一组接口划分在一个资源类中, 更便于开发者使用。 1) 资源类名称由小写字母和下划线组成。( [a-z_]+) 2) 资源类名称不能为空。 |
接口名称 | APIBUS 推荐使用英文命名接口。尽量保证接口名称可以准确表达接口功能, 便于开发者使用。 一些常用关键字已经作为系统关键字保留,请不要使用。如: create、new、 destroy、show、update等。 接口名称由小写字母和下划线组成。( [a-z_]+) |
返回值格式 | 调用接口后返回的数据格式,目前支持Json和XML。 |
参数 | APIBUS 推荐使用英文单词缩写作为参数名称。尽量保证参数名称可以准确表达接口功能, 便于开发者使用。 如: id、page、max_id 等。 参数名称由小写字母和下划线组成。( [a-z_]+) |
http://test.sinaapp.com/1/dir/createdir.json?create_name=tempdir
实例说明URL | 名称 |
test.sinaapp.com | 域 |
1 | 版本 |
dir | 资源类 |
createdir | 接口名称 |
json | 返回值格式 |
create_name=tempdir | 参数 |
HTTP RETURN 状态码定义
APIBUS会根据http返回码判断执行状态及是否计费。
HTTP 调用返回状态码及说明
状态码 | 状态说明 |
200 | *执行成功, 计费。 |
201 | *执行成功, 不计费。 |
304 NOT MODIFIED | 没有数据返回 |
400 BAD REQUEST | 请求数据不合法 |
401 Not Authorized | 没有进行身份验证 |
403 Forbidden | 没有权限访问对应的资源 |
... | ... |
200和201作为唯一有效的两个状态码,如果调用成功必须返回,其他状态码对APIBUS无实际意义。
接口错误信息返回值定义
APIBUS错误信息返回格式(请您注意:状态码1-1000作为系统自保留,服务不得占用。)
数据结构 ApiBusError
errcode: 错误编码
errdesc: 错误描述
返回值格式
JSON
返回码定义:
状态码 | 英文说明 | 解释 |
0 | success | 成功 |
600 | internal_error Fetchurl | 内部错误 |
601 | no_such_user | _AccessKey_ 不存在 |
602 | auth_error | 认证错误,可能是secretkey 不正确 |
603 | out_of_quota | 超出fetchurl 的使用配额 |
604 | rest_error | REST 协议错误,相关的header 不存在或其它错误 |
605 | invalid_uri | _FetchUrl_不是有效的Url |
606 | invalid_host | _FetchUrl_对应的服务器不可达或者是一个私网地址 |
607 | service_not_enabled | _FetchUrl_对应的扩展服务尚未启用 |
返回错误样例(JSON):
{"ApiBusError":{"errcode":"600","errdesc":"internal_error"}}
{"ApiBusError":{"errcode":"601","errdesc":"no_such_user"}}
多语言SDK
自动生成SDK
您只需要按照《XML描述文档》>进行API xml文件的编写,在服务商店上传并完善此文档相关联的说明与帮助,就可以自动生成一整套完善的多语言sdk包,简要说明文档,实例。帮助服务使用者快速上手。
流程图示:
1.按照XML描述文档进行SDK xml文档的编写。描述文档介绍请参考>>XML文档
2.在服务商店后台或接入流程中提交SDK描述文档。
3.在服务商店后台或接入流程中完善帮助文档。
4.提交完成,自动生成多语言SDK和说明及样例。
手工修改SDK示例
如果您已经有编写好的SDK了,那么您只需要按照SDK编写规范中的说明,对SDK简单的调整一下就可继续使用了,并上传到服务商店供服务使用者下载。
流程图示:
1.在服务商店后台或接入流程中提交SDK源码。
2.在服务商店后台按照APIBUS标准修改源码(也可修改后再上传)。
3.提交完成,上传的SDK供使用者下载。
手工修改SDK示例
现在以短信服务为例进行服务使用的说明。
1.调用api修改:调整原来的接口地址,改为服务商店代理地址
原: baseurl = 'http://sae.sina.com.cn/sendsms.php';
改为:baseurl = 'g.apibus.io';
$fetchurl = 'http://x.sae.sina.com.cn/sendsms.php';
2.无需重新定义调用方法和授权,只需要包含fetchurl文件,将实际调用的接口获取结果的部分换为以下部分,生成实例进行调用即可。
require_once("fetchurl.class.php");
$do_fetch = new ApiBusFetchUrl();
$response = $do_fetch -> fetch($fetchurl);
这样就改造完成了。
3.在非SAE下使用需要在调用时带上accesskey参数,作为授权校验信息调用即可。
define("ACCESSKEY", "****");
define("SECRETKEY", "****");
$do_fetch = new ApiBusFetchUrl(ACCESSKEY, SECRETKEY);
使用服务
在SAE上使用
因为是在SAE环境下,所以无需再定义accesskey和secretkey,直接调用即可,代码如下:
$Sms = apibus::init("Sms");
$sendmeg->send('13810008888','hello world','UTF-8');
在SAE环境使用服务是多么的简单!
在个人服务商上使用(暂不支持收费服务)
1.在服务商店找到短信服务,并下载php版本的SDK包,将压缩包解压后得到一个文件夹和一个文件:
apibus:基本客户端php类库文件包
sample:用例文件
apibus.class.php:初始化类文件
2.在同一路径下创建一个文件用来调用服务,举例:sample.php
/*因为不在SAE环境下,所以需要自行填入开发者的ACCESSKEY和SECRETKEY。*/
require_once("../apibus.class.php");
define("ACCESS_KEY", "******");
define("SECRET_KEY", "******");
$Sms = apibus::init("Sms", 1, ACCESSKEY,SECRETKEY);
$obj = $Sms->send("138100000000", "测试","UTF-8" );
在非SAE环境使用服务也很便捷
服务接入流程
第一步:提交申请
登陆服务商店,点击首页的“服务接入申请”进入服务申请页面,线上填写《第三方服务接入申请》,并遵守《第三方服务接入协议》。提交后进入API提交页
第二步:提交API
进入API提交页面,填写 API的基本资料,配额设置及自定义计费方式。
第三步:提交SDK
上传xml文件或自编sdkzip包,完成服务提交,提交后您就可以通过APIBUS平台开发调试SDK,并由系统自动生成以下内容:
1.多平台sdk(PHP,JAVA,Python)
2.服务文档及测试控制台
3.黑盒测试用例
第四步:文档完善
如果上传xml可下载自动生成的sdk文件进行调试。对提交的API进行方法说明和用例说明的完善,方便使用者更快的学习使用服务。
第五步:服务发布
进入服务接入申请的最后一步页面,再次确认服务信息后点击“提交服务发布”按钮进行提交。审核发布后即完成整个接入流程。
服务商店工作人员在3 个工作日内,完成服务文档、SDK 线上部署工作。
成功上线后给您发送邮件通知。 此时服务商店平台开发者,可以在扩展服务列表中查看到该服务,服务商店会提醒开发者此服务处于发布阶段。
到此,您就完成了一个服务在APIBUS服务平台的接入。
申请接入服务需要提供以下基本信息:
- 服务信息:服务相关资料。
- 服务提供方信息
在提交API时需要提供API相关信息:
- API资料。
- 配额设定
- 计费设定
提交SDK时,可以填入简单的API说明和示例,方便生成说明文档和实例。