本章內容:php
一、Flask-restfulpython
二、ansibleweb
三、jsonrpc apijson
四、zabbix apiflask
五、token後端
參考文檔api
#!/usr/bin/env python #coding:utf8 from flask import Flask,request from flask.ext.restful import Resource,Api,reqparse,abort import json app = Flask(__name__) api = Api(app) todos = { '1' : {'task':'build an API'}, '2' : {'task':'build a web'}, '3' : {'task':'build a app' } } # 資源不存在時的返回 def abort_if_todo_doesnt_exist(todo_id): if todo_id not in todos: abort(404,message="todo {} doesn't exist".format(todo_id)) # 獲取傳入的變量task值 parser = reqparse.RequestParser() parser.add_argument('task',type=str) # 資源的查、改、刪,須要傳入id class Todo(Resource): def get(self,todo_id): abort_if_todo_doesnt_exist(todo_id) return {todo_id:todos[todo_id]} def put(self,todo_id): abort_if_todo_doesnt_exist(todo_id) args = parser.parse_args() print args task = {'task':args['task']} # request.args.get('task') todos[todo_id] = task return {todo_id:todos[todo_id]},201 def delete(self,todo_id): abort_if_todo_doesnt_exist(todo_id) del todos[todo_id] return '',204 # 資源的查全部 添加,不須要傳入id class TodoList(Resource): def get(self): return todos def post(self): args = parser.parse_args() todo_id = str(int(max(todos))+1) todos[todo_id] = {'task':args['task']} return todos[todo_id],201 # 定義兩個場景的訪問路由 api.add_resource(Todo,'/<string:todo_id>') api.add_resource(TodoList,'/') if __name__ == '__main__': app.run(host='0.0.0.0',port=7777,debug=True)
Ansible — 安裝部署及基本命令restful
#服務端 #!/usr/bin/env python #coding:utf-8 from flask import Flask,render_template,request from flask_jsonrpc import JSONRPC import json app = Flask(__name__) jsonrpc = JSONRPC(app, '/api') @jsonrpc.method('user.create') #響應有不定參數傳入的method,最經常使用 def user(**kwargs): data = {} data['name'] = kwargs.get('name',None) data['age'] = kwargs.get('age',None) return 'I am %s,age is %s' % (data['name'],data['age']) if __name__=='__main__': app.debug=True app.run(host='0.0.0.0',port=5001)
#客戶端 #!/bin/env python # -*- encoding: utf-8 -*- from __future__ import unicode_literals import json import requests headers = {'content-type': 'application/json'} url = "http://127.0.0.1:5001/api" data = { 'jsonrpc':'2.0', 'method': 'user.create', #請求後端不定參數的method 'id':'1', 'params':{ 'name':'wd', #無參數的method,此處爲空,指定參數的method,只能保留一條參數 'age':'18' } } r = requests.post(url, headers=headers,json=data) print r.status_code print r.text
zabbix登陸接口是咧 import requests import json headers = {'content-type': 'application/json'} url = "http://123.59.185.96/zabbix/api_jsonrpc.php" def zabbix_login(): data = { 'jsonrpc':'2.0', 'method': 'user.login', 'id':'1', 'params':{ 'user':'admin', 'password':'zabbix' } } r = requests.post(url, headers=headers,json=data) return r.text def tokens(): token = json.loads(zabbix_login())['result'] return token def hostlist(): data = { 'jsonrpc':'2.0', 'method':'host.get', "params": { "output": "extend", "filter": { "host": [ "Zabbix server", "Linux server" ] } }, "auth": tokens(), "id": 1 } r = requests.post(url, headers=headers,json=data) return r.text print hostlist()