読者です 読者をやめる 読者になる 読者になる

俺の備忘録

個人的な備忘録です。

requestsモジュールでREST APIを叩く(私的メモ)

ごめんなさい。完全に私的なメモです。 会社で扱ってる製品でREST APIをサポートするものが増えてきたので 簡単にREST APIを叩けるようにpythonの関数を準備した。 REST APIなのでクライアント/サーバ間でやりとりするデータはjson形式前提。 jupyter等で対話式に呼び出して使うとおそらくいい感じの使用間になるはず。

#!/usr/bin/python
# -*- coding: utf-8 -*-

import json
import requests
import traceback
import logging

'''
メモ

import Rest

# setting
Rest.HOST = "your host"
Rest.PORT = "your port number"

r = Rest.post("/hoge/piyo", {"piyo":"hoge"})
r = Rest.get("/hoge/piyo", {"piyo":"hoge"})
r = Rest.delete("/hoge/piyo", {"piyo":"hoge"})
r = Rest.put("/hoge/piyo", {"piyo":"hoge"})

# Return object(requests.Response) attributes
r.status_code
r.headers
r.json
r.text
r.content
r.url

http://docs.python-requests.org/en/master/api/#requests.Response
'''

HOST = "localhost"
PORT = "9999"
DEFAULT_HEADERS = {'Content-Type': 'application/json'}


def get(path, headers=DEFAULT_HEADERS, params=None):
    try:
        return requests.get("http://{0}:{1}{2}".format(HOST, PORT, path),
                         params=params,
                         headers=headers)

    except Exception as e:
        handle_exception(e)


def post(path, body, headers=DEFAULT_HEADERS):
    return common_send_data(requests.post, path, body, headers)


def put(path, body, headers=DEFAULT_HEADERS):
    return common_send_data(requests.put, path, body, headers)


def delete(path, body=None, headers=DEFAULT_HEADERS):
    return common_send_data(requests.delete, path, body, headers)


def common_send_data(http_func, path, body, headers):
    try:
        return http_func("http://{0}:{1}{2}".format(HOST, PORT, path),
                         data=json.dumps(body),
                         headers=headers)
    except Exception as e:
        handle_exception(e)


def handle_exception(e):
    logging.error(e)
    logging.error(traceback.format_exc())


def print_dic(dic):
    for k, v in dic.iteritems():
        print k + ": " + v