2016-10-26 5 views
1

У нас есть приложение WSGI с Python3, работающее под Apache Linux.WSGI с последующей обработкой RESTful

Мы хотим взаимодействовать с внешним API после подтверждения запроса/уведомление, полученное с помощью веб-сервера

Пример кода WSGI питон:

 
def application(environ, start_response): 
    path= environ.get('PATH_INFO', '') 
    if path == "/ProcessTransact": 
     import sys 
     sys.stderr.write("Entering /ProcessTransact, Checking validity ...\n") 
     # Get the context of the notification/request from Post parameters etc, assume it is a valid ... 
     status = '200 OK' 
     body = b"Acknowledge the valid submit with '200 OK'" 
     response_headers = [ 
      ('Content-Type', 'text/html'), 
      ('Content-Length', str(len(body))) 
     ] 

     start_response(status, response_headers) 
     return [body] 

     # we have acknowledged the context of the above request 
     # we want to do an HTTP POST based on the context 
     # When we return [body], we lost the processing thread 

     import requests   #or maybe something else 
     sys.stderr.write("POST RESTful transactions here after acknowledging the request (we never get here).\n") 

Наш код немного отличается от образца кода (с использованием Werkzeug).

Каков наилучший способ решить эту проблему? Мы целенаправленно не использует каких-либо рамок (кроме Werkzeug), и мы хотим, чтобы избежать больших изменений в архитектуре (тысячи строк кода)

Спасибо вам, Kris

+0

Прочитать http://modwsgi.readthedocs.io/en/develop/user-guides/registering-cleanup-code.html Это становится беспорядочным. –

+0

Спасибо @GrahamDumpleton - эти варианты немного новы для меня. Использование «try» и «finally» в фреймворке Exception - вариант, - Im задается вопросом, может ли использование рамки Exception непреднамеренно привести к головным болям позже. Например, если вы хотите инициировать последовательность взаимодействий RESTful. Вы указываете, что «atexit» может быть не переносимым, поэтому, возможно, менее желательно. –

+0

Является ли разница между WSGI и Python RESTful развязкой HHTP-соединения из потока? Интересно, есть ли что-то вроде простого модуля PESTON RESTful, который можно было бы подключить к Apache Alias ​​/ Directory? –

ответ

0

Я реализовал решение путем создания нового Python нить и присоединение к ней второй транзакции. Чтобы убедиться, что он срабатывает после первой транзакции, я помещаю небольшую задержку в поток до начала второй транзакции. Надеемся, что с потоками нет проблем.

Смежные вопросы