对API返回的消息进行编码

2024-09-29 12:29:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在与API通信,每次发送请求时,都会返回一个状态消息列表。我还有一个数据库,用来记录每个请求。对于每个请求,我的db表都有一行,我希望有一列用于返回的状态消息。API总共可以返回15条消息,我正在考虑对它们进行编码,这样我就不会存储我收到的所有消息的一个巨大字符串,比如“message1+message2+message3+message4…”

我知道我可以做如下操作,这样我就可以存储像“a,B,C,D…”这样的字符串,但使用15个elif似乎设计得不好:

def request_sent(self,some_list):
    codeCombo = ''
    for message in some_list:
        code = self.get_log_code(message)
        codeCombo = codeCombo + ',' + code
    //store codeCombo in db

def get_log_code(status_message):

    if status_message == 'ORDER_COMPLETE':
        return 'A'
    elif status_message == 'ORDER_FAILED':
        return 'B'
    elif status_message == 'INSUFFICIENT_FUNDS':
        return 'C'
    elif status_message == 'SYSTEM_BUSY':
        return 'D'
    ...

有没有更好的办法

我很想知道二进制方法是否有效。如果我有一个15位的二进制值,它的所有位最初都设置为零。每一位代表一条状态信息。当状态消息出现时,它表示的位值将切换为1


Tags: 字符串selfapi消息messagedbreturn状态
3条回答

一个经典的方法是使用字典

messages = {'ORDER_COMPLETE'    : 'A',
            'ORDER_FAILED'      : 'B',
            'INSUFFICIENT_FUNDS': 'C',
            'SYSTEM_BUSY'       : 'D'}

if status_message in messages:
    return messages[status_message]
else:
    return '?'

注意检查(if status_message in messages:),以防有我们不知道的消息。API有一个令人讨厌的习惯,即发送未记录的消息

正是格雷格·K。说。您可以将它们作为键/值对存储在字典中

例如:

errors = {
            "ORDER_COMPLETE": "A",
            "ORDER_FAILED": "B",
            "INSUFFICIENT_FUNDS": "C",
            "SYSTEM_BUSY": "D"
}

def get_log_code(status_message):
    return errors[status_message]

最简单、最快的方法是将所有回复存储在字典中:

response_dict={'ORDER_COMPLETE':'A',
               'ORDER_FAILED':'B',
               'INSUFFICIENT_FUNDS':'C',
               'SYSTEM_BUSY':'D'}

您可以简单地将函数修改为以下内容:

def get_log_code(status_message):
    return response_dict[status_message]

相关问题 更多 >