我刚刚开始使用猎鹰,我正在努力做一些我认为应该非常简单和基本的事情。我只是希望我的一个服务向另一个服务发送请求。
让我用一个很小的代码示例让它更简单。这是两个微服务。服务#1存储一个号码,服务#2增加存储的号码。
class NumberResource:
def on_post(self, req, resp):
self.value = req.media.get('value')
resp.media = {'value': self.value}
def on_get(self, req, resp):
resp.media = {'value': self.value}
class NextNumberResource:
def on_get(self, req, resp):
sibling = {}
# TODO sibling = get("/number")
resp.media = {'value': sibling.value+1}
api = falcon.API()
api.add_route('/number', NumberResource())
api.add_route('/next', NextNumberResource())
现在我可以存储号码17:
curl http://localhost:8000/number -d '{"value":17}'
我可以检索存储的值:
curl http://localhost:8000/number
{"value": 17}
我想填写TODO行,以便我可以检索计算值:
curl http://localhost:8000/next
{"value": 18}
最好的方法是什么?
答案 0 :(得分:0)
最好的方法是通过Python中的OOP模式。可能是这样的一个例子(尽管它需要更多防御性编程+序列化/反序列化)
class SomeLogicHandler():
myValue #Important to have myValue as class variable and not as instance variable.
def __init__(self):
super(SomeLogicHandler, self).__init()
self.updateMyValue = self._updateMyValue
self.getMyValue = self._getMyValue
def _updateMyValue(self, value):
self.myValue+= value
def _getMyValue(self):
return {value: self.myValue}
class ApiRouteHandler(SomeLogicHandler):
def __init__(self):
super(ApiRouteHandler, self).__init__()
def on_post(self, req, resp):
#post implementation.
self.updateMyValue(req.media.get('value'))
class ApiRouteHandler2(SomeLogicHandler):
def __init__(self):
super(ApiRouteHandler2, self).__init__()
def on_get(self, req, resp):
#get implementation.
resp.body = self.getMyValue()