我在docker-compose
,frontend
和backend
中运行了两项服务,这两项服务都是使用flask开发的。
frontend:
restart: always
build: ./frontend
expose:
- "8000"
command: /usr/local/bin/gunicorn --bind :8000 run:application
backend:
restart: always
build: ./backend
expose:
- "9000"
command: /usr/local/bin/gunicorn --bind :9000 run:application
我在后端托管一个简单的REST API
@app.route('/api/weather', methods=['GET'])
def get_weather():
super_cool_function()
return jsonify({'temperature': 100})
在前端使用此API的最佳方法是什么?我想跟随是一种方式,但我不确定应该是requests.get()
@app.route('/hello')
def hello():
r = requests.get()
return render_template('hello.html', temperature=r.json()['temperature'])
答案 0 :(得分:1)
如果没有实现您的设置,我通常会通过实现类似于以下的方法来使用请求进行REST调用。
def get_weather(data):
# Set api endpoint to what's needed
endpoint = 'http://example.com/api/weather:9000'
# Do any work needed specific to api prior to call
# Send request and get response
response = requests.get(url=endpoint, data=data)
# Process response
result = process(response)
return result
您可以创建一个类,该类将对同一个URL进行所有api调用,只需更改端点。
class ApiCaller():
def __init__(self, base_url, port):
self.base_url = base_url
self.port = port
def __get_url(self, endpoint):
return '%s%s%s' % (self.base_url, endpoint, self.port)
def get_weather(self, data):
endpoint = 'weather'
return requests.get(url=self.__get_url(endpoint), data=data)
def get_hello(self, data)
endpoint = 'hello'
return requests.get(url=self.__get_url(endpoint), data=data)