GET RESTful With Python
Python调用RESTful:http://blog.akiban.com/get-restful-with-python/
本文就是参考该英文做了一下试验,后续补充一下翻译。
This post will take a look at our REST API by creating a Python script to interact with the entity endpoint.
One of the key benefits of using standard technologies, formats, and protocols is the incredible amount of existing tooling that you get for free. Since we’ve been busy building our new service, backed by our ever changing database, we haven’t gotten around to client libraries yet.
However, we do speak JSON through REST over HTTPS. Every language already has battle hardened libraries for working with those. For Python, it doesn’t get much better than the requests library. Their motto is HTTP for Humans and it makes working with RESTful services a breeze.
需求:
As in Schemaless SQL, we’ll be using a DataSpace with a single entity named hopes.
On the service side, just copy and deploy the hopes DataSpace and make note of the credentials.
On the client side, we just need to install the requests library.
$ pip install requests
Hello, World
We’ll be using an external JSON configuration file, named config.json, for simplicity. Create the JSON files as below with real values from the Deployments page.
{
"host": "host",
"port": "port",
"user": "user",
"pass": "pass"
}
The simplest endpoint exposed by the Akiban Server is version. It has no dependencies and will always work if valid credentials are supplied.
We’ll start our script, named akiban_rest.py, with the code below to load our configuration and execute a version request.
import json
import requests config = {}
with open('config.json') as cfg:
config = json.load(cfg) resp = requests.get(
'https://%s:%s/v1/version' % (config['host'], config['port']),
auth = (config['user'], config['pass'])
) print resp.text
Running that will give output like below, though the specific server_version may vary.
$ python akiban_rest.py
[{"server_name":"Akiban Server","server_version":"1.6.1-SNAPSHOT.2606"}]
Congrats! You're now talking to the Akiban REST API. We'll be wrapping the rest of the Entity Resources to provide convenient access from the command line.
Helpers
A few helpers are in order. One for building the URI string, one for pretty-printing our JSON response, and a variable for holding the configured credentials.
def url(endpoint):
return 'https://%s:%s/v1%s' % (config['host'], config['port'], endpoint) def dump(response):
print json.dumps(json.loads(response.text), indent=2) AUTH = (config['user'], config['pass'])
Commands and Arguments
The overall script architecture will be quite simple. A single function per endpoint we're exposing, a map to name it, and very simple command line argument handling.
Note that a real library would want a number of things that have been omitted for brevity, such as argument checking and specific error messages.
def version():
return requests.get(url('/version'), auth=AUTH) commands = {
'version': version
} cmd_name = sys.argv[1]
cmd_args = sys.argv[2:]
cmd = commands.get(cmd_name)
resp = cmd(*cmd_args)
dump(resp) We can now run the version command.
$ python akiban_rest.py version
[
{
"server_version": "1.6.1-SNAPSHOT.2606",
"server_name": "Akiban Server"
}
]
GET and POST
Now we can begin interacting with our hopes entity. New methods for retrieving all, or specific, instances with GET and creating a new instance with POST.
def entity_get_all(entity):
return requests.get(url('/entity/%s' % entity), auth=AUTH) def entity_get(entity, ids):
return requests.get(url('/entity/%s/%s' % (entity, ids)), auth=AUTH) def entity_post(entity, json):
return requests.post(url('/entity/%s' % entity), data=json, auth=AUTH) commands = {
'version': version,
'all': entity_get_all,
'get': entity_get,
'create': entity_post
}
The create, get, and get_all commands now function.
$ python akiban_rest.py create hopes '{"desc": "Part IV: A New Hope", "date": "2013-04-04 16:58:30", "bumpcount": 0}'
{
"id": 1
}
$ python akiban_rest.py create hopes '{"desc": "Another", "date": "2013-04-04 16:58:35", "bumpcount": 0}'
{
"id": 2
}
$ python akiban_rest.py get hopes 1
[
{
"date": "2013-04-04 16:58:30",
"bumpcount": 0,
"id": 1,
"desc": "Part IV: A New Hope"
}
]
$ python akiban_rest.py all hopes
[
{
"date": "2013-04-04 16:58:30",
"bumpcount": 0,
"id": 1,
"desc": "Part IV: A New Hope"
},
{
"date": "2013-04-04 16:58:35",
"bumpcount": 0,
"id": 2,
"desc": "Another"
}
]
PUT and DELETE
We can now finish out the entity endpoint by adding commands for replacing and deleting. Note that the dump has been tweaked to handle no_content responses, like delete.
def dump(response):
if response.status_code != requests.codes.no_content:
print json.dumps(json.loads(response.text), indent=2) def entity_put(entity, ids, json):
return requests.put(url('/entity/%s/%s' % (entity, ids)), data=json, auth=AUTH) def entity_delete(entity, ids):
return requests.delete(url('/entity/%s/%s' % (entity, ids)), auth=AUTH) commands = {
'version': version,
'all': entity_get_all,
'get': entity_get,
'create': entity_post,
'replace': entity_put,
'delete': entity_delete
}
And to demonstrate.
$ python akiban_rest.py replace hopes 2 '{"id": 2, "desc": "A better name", "date": "2013-04-04 16:58:35", "bumpcount": 100}'
{
"id": 2
}
$ python akiban_rest.py delete hopes 1
$ python akiban_rest.py all hopes
[
{
"date": "2013-04-04 16:58:35",
"bumpcount": 100,
"id": 2,
"desc": "A better name"
}
]
Summary
We started out with an empty DataSpace and a blank akiban_rest.py file. After loading our example hope and deploying it, we could start to interact with it through a simple REST call. Fifty lines of Python later and we now have a respectable command line script for viewing, creating, updating, and deleting our entities.
All of the code from this post is available in this Gist. Who knows, this might just grow into our Python client library!
android调用RESTful:http://bbs.it-home.org/thread-10447-1-1.html
GET RESTful With Python的更多相关文章
- openstack命令行
openstack的每一个子项目(project)都有自己对应的命令行API,所有的这些API都是基于RESTful的,python代码实现的API.也就是说,这些API都是基于HTTP实现的,所以A ...
- 使用Empire自动获取域管理员
使用Empire自动获取域管理员 译:backlion 前言 自从Empire和BloodHound被应用来,对AD渗透已经可以获取到内网环境95%的信息量.作者发现自己一遍又一遍地在做同样重复的事 ...
- TDengine概述以及架构模型
TDengine TDengine是一个高效的存储.查询.分析时序大数据的平台,专为物联网.车联网.工业互联网.运维监测等优化而设计. 您可以像使用关系型数据库MySQL一样来使用它. TDengin ...
- 使用python的Flask实现一个RESTful API服务器端[翻译]
最近这些年,REST已经成为web services和APIs的标准架构,很多APP的架构基本上是使用RESTful的形式了. 本文将会使用python的Flask框架轻松实现一个RESTful的服务 ...
- Python flask 基于 Flask 提供 RESTful Web 服务
转载自 http://python.jobbole.com/87118/ 什么是 REST REST 全称是 Representational State Transfer,翻译成中文是『表现层状态转 ...
- python Eve RESTFul 尝试笔记
0.前言 最近重点研究了yeelink平台的原理和使用,yeelink平台和多数云平台设计一样应用了RESTFul框架.嵌入式侧(或者是客服端侧)的相关技术研究的比较充分(个人这么认为),是不是该弄弄 ...
- 使用python的Flask实现一个RESTful API服务器端
使用python的Flask实现一个RESTful API服务器端 最近这些年,REST已经成为web services和APIs的标准架构,很多APP的架构基本上是使用RESTful的形式了. 本文 ...
- 让python bottle框架支持jquery ajax的RESTful风格的PUT和DELETE等请求
这两天在用python的bottle框架开发后台管理系统,接口约定使用RESTful风格请求,前端使用jquery ajax与接口进行交互,使用POST与GET请求时都正常,而Request Meth ...
- 使用 Python & Flask 实现 RESTful Web API
环境安装: sudo pip install flask Flask 是一个Python的微服务的框架,基于Werkzeug, 一个 WSGI 类库. Flask 优点: Written in Pyt ...
随机推荐
- PowerShell 获取系统的硬件信息
1.获取系统的BIOS的信息: Get-WMIObject -Class Win32_BIOS 2.获取内存信息: Get-WMIObject -Class Win32_PhysicalMemory ...
- Python开发基础-Day17面向对象编程介绍、类和对象
面向对象变成介绍 面向过程编程 核心是过程(流水线式思维),过程即解决问题的步骤,面向过程的设计就好比精心设计好一条流水线,考虑周全什么时候处理什么东西.主要应用在一旦完成很少修改的地方,如linux ...
- Web应用扫描测试工具Vega
Web应用扫描测试工具Vega Vega是Kali Linux提供的图形化的Web应用扫描和测试平台工具.该工具提供代理和扫描两种模式.在代理模式中,安全人员可以分析Web应用的会话信息.通过工具 ...
- 杭电oj 1002
#include <iostream> #include <algorithm> using namespace std; int nCases; ], n[]; ], b[] ...
- ACM的奇计淫巧_bitset优化
什么是bitset bitset 是STL库中的二进制容器,根据C++ reference 的说法,bitset可以看作bool数组,但优化了空间复杂度和时间复杂度,并且可以像整形一样按位与或. 使用 ...
- [Nescafé41]异化多肽(多项式求逆元)
2015年的题,应该是将形式幂级数引入国内的元老级题目. 大意:给定一个大小为m的正整数序列和n,问有多少种选法可以凑成n,每个数可以选多次,种类不同算不同方案.$n,m,C \leqslant 10 ...
- 【bzoj1594】猜数游戏
1594: [Usaco2008 Jan]猜数游戏 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 556 Solved: 225 Descripti ...
- 【DFS】【图论】NOIP2014寻找道路
[NOIP2014]寻找道路 题目描述 Description 在有向图G中,每条边的长度均为1,现给定起点和终点,请你在图中找一条从起点到终点的路径,该路径满足以下条件: 1.路径上的所有点的出边所 ...
- 【后缀自动机】hdu6194 string string string
题意:给你一个字符串和一个正整数K,让你输出恰好出现K次的子串的数量. 对后缀链接树进行dp预处理后,SAM每个点的endpos大小就是该点结尾的子串出现的次数,maxlen-minlen+1就是子串 ...
- 【Splay】洛谷3372 【模板】线段树 1
Splay区间加,询问区间和. #include<cstdio> #include<iostream> #include<cstring> #include< ...