如何在没有HTTP的情况下创建像REST API这样的“东西”?

问题描述 投票:0回答:1

首先,我很抱歉这个糟糕的头衔。

我想让my_api_service.py作为后台服务运行,它与其他脚本的REST-API类似,但没有HTTP。

在不同Python实例上运行的不同虚拟环境上的脚本应该能够通过my_api_service.py使用my_api_connector.py

我希望我的问题不是基于意见的,因为我正在寻找一个共同/最佳实践/模式。

以下是伪代码。

my_api_service.py - Python实例1

# Singleton
instance = None
def instance():
    if not instance:
        self.instance = MyGlobalService()
    return instance

# Title setter
def set_title(title):
    self.instance.set_title(title)

# Title getter
def get_title(title):
    return self.instance.get_title()

print_current_title.py - Python实例2

from my_api_connector import get_instance

while True:
    # The title should change when set_title.py was executed
    title = get_instance().get_title()
    print('Current title: {0}'.format(title))

set_title.py - Python实例3

from my_api_connector import get_instance
get_instance().get_title('New title')

任何的想法?提前致谢!

python linux python-3.x service architecture
1个回答
1
投票

这是一个使用套接字的例子。

client.朋友:

import my_api_connector

print(my_api_connector.get_title())  # will print title
my_api_connector.set_title('another_title')
print(my_api_connector.get_title())  # will print another_title

没有_API_connector.朋友:

import socket

IP = '127.0.0.1'
PORT = 12345
SOCK = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

def get_title():
    SOCK.sendto(b'get_title', (IP, PORT))
    data, _ = SOCK.recvfrom(1024)
    return str(data, 'utf-8')

def set_title(title):
    SOCK.sendto(bytes('set_title {}'.format(title), encoding='utf-8'), (IP, PORT))

server.朋友:

import socket

IP = '127.0.0.1'
PORT = 12345
SOCK = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
SOCK.bind((IP, PORT))

def main():
    title = 'title'
    while True:
        data, addr = SOCK.recvfrom(1024)
        data = str(data, 'utf-8')
        if data == 'get_title':
            SOCK.sendto(bytes(title, encoding='utf-8'), addr)
        elif data.startswith('set_title'):
            title = data[len('set_title '):]

if __name__ == '__main__':
    main()

只需在一个控制台中启动server.py,然后在另一个控制台中启动client.py。

© www.soinside.com 2019 - 2024. All rights reserved.