构建web(json-rpc)api的框架。

webapi的Python项目详细描述


webapi

构建web(json-rpc)api的框架。

快速启动

定义消息和服务:

class TestRequest(messages.Message):
    string = messages.StringField(1)

class TestResponse(messages.Message):
    string = messages.StringField(1)

@webapi.package('examplepackage')
class ExampleService(object):

    @webapi.method(TestRequest, TestResponse, 'examplemethod')
    def test(self, request):
        """ an identity function"""
        assert isinstance(request, TestRequest)
        return TestResponse(string=request.string)

构建wsgi应用程序:

API = webapi.api([ExampleService], 'exampleapi', 'v1')

routes = [
    webapp2.Route('/rpc', webapi.rpc_handler(API))
]
app = webapp2.WSGIApplication(routes)

api应该在/rpc上可用。

方法exampleAPI.examplePackage.exampleMethod应可供调用方使用。

导出发现应用程序

用python定义:

API = webapi.api([TestService], 'testapi', 'v1')

api_directory_app = webapi.APIDirectory([API])

向app.yaml注册以匹配路径/discovery/*。

使用javascript客户端。

使用基本客户端

包括编译的脚本。

安装:

var RPC_URL = '/rpc';

webapi.client.install(new webapi.RpcClient(RPC_URL));

调用方法:

var METHOD = 'exampleapi.examplepackage.examplemethod'

var req = webapi.client.rpc(METHOD, {'string': 'test'});

req.addCallback(function(resp){
    // this should return "test"
    console.log(resp)
});

req.addErrback(function(resp){
    // jsonrpc error objects can be handled here
    console.error(resp)
});

使用目录客户端

包括编译的脚本。

安装:

var RPC_URL = '/rpc';

webapi.client.install(new webapi.DiscoveryClient());

加载API(从目录):

webapi.client.load(apiName, apiVersion, root)

加载rest描述(从json对象):

webapi.client.loadDescription(rawRestDescription)

加载api之后,其方法将导出到webapi命名空间。例如:

var request = webapi.apiname.package.method();

执行rpc方法(手动):

var request = webapi.client.rpc(methodId, params);

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java Spinner选定值未上载到firebase数据库   java如何通过bukkit中的配置添加消息?   java在SharedReference中保存列表的泛型类型   javascript Java小程序未定义   swt在Java中构建控制台应用程序   java OAuth同意屏幕没有突然显示,没有错误?   java webview选择文件安卓不工作   java Spring boot JPA如何从同一连接添加多个数据库?   java JDBC DB2驱动程序计时器线程处于阻塞状态   java我在vscode中运行flatter时看到一个错误在phone中运行应用程序somone能否帮助我plz   Java:生成JSON:如何避免生成不完整的JSON   java Date compareTo()方法始终返回1   当使用Junit runner运行测试时,java Spring自动连线失败   java Android/Sockets如何将信息从主UI线程发送到socket线程?   java Android内存声明全局变量   java如何在JBoss中拥有多个具有相同JNDI名称的数据源?   python在Java中嵌入CPython时,为什么会挂起?   java如何提供深度模拟对象?   java“find:smallint,expected:integer”Hibernate对informix数据库的验证在短时间内失败