使用微服务的 Python Falcon 微服务



我刚刚开始使用Falcon,我正在尝试做一些我认为应该非常简单和基本的事情。我只是希望我的一个服务向另一个服务发送请求。

让我用一个小的代码示例使它更加简单。下面是两个微服务。服务 #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}
最好的

方法是什么?

最好的方法是通过 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()

相关内容

  • 没有找到相关文章

最新更新