GNU Health/FHIR REST 服务器
快速医疗互操作性资源 (FHIR) 是由 HL7 开发的一种用于电子交换医疗信息信息的标准。有关 FHIR 的更多信息,请参见http://hl7.org/fhir
表述性状态转移 (REST) 是由 W3C 技术架构组 (TAG) 开发的一种用于可扩展 Web 服务的软件体系结构风格。基于 REST 的系统可以通过超文本传输协议 (HTTP) 访问,HTTP 是 Web 浏览器用于从 Web 服务器请求 Web 页面并向 Web 服务器发送数据的协议。有关 REST 的更多信息,请参见https://en.wikipedia.org/wiki/Representational_state_transfer
服务器需要 Flask 及其一些插件。当然,还需要一个可用的 GNU Health 安装。
建议使用 virtualenv 将软件包安装到虚拟环境中。
设置环境(作为 gnuhealth 用户)
$ pip install virtualenv # Install virtualenv using python (may require root) $ cd my_work_folder # Wherever you want to put the virtual environment folder $ virtualenv -p /usr/bin/python2 venv # Create the environment, with the Python 2.x interpreter $ source venv/bin/activate # Active the environment
现在使用 requirements 文件安装软件包
$ pip install -r requirements.txt
系统上已经安装了一些软件包(如 pywebdav)。但是,在虚拟环境中工作时,管理和调试 Flask 服务器通常更容易。
有关 virtualenv 的更多帮助。
服务器附带一个简单的生产配置文件。但是,需要对其进行编辑。
server/config.py ---------------- TRYTON_DATABASE = '' # GNU Health database SERVER_NAME = '' # Domain name of the server (e.g., fhir.example.com) SECRET_KEY = '' # Set this value to a long and random string
Flask 及其插件提供了其他选项:* Flask * Flask-Login * Flask-Tryton * Flask-Restful * Flask-WTF
使用 TLS。敏感的医疗信息必须受到保护并且保密。
默认情况下,除了符合性声明之外,所有 FHIR 端点都需要用户身份验证。用户身份验证和访问遵循 Tryton 的模型,尊重模型和字段访问权限。
用于登录 GNU Health 的相同凭据用于访问 FHIR REST 服务器。
服务器附带一个简单的脚本 (run_server.py),位于server/文件夹中,用于使用Tornado运行服务器。
该脚本期望它自己位于server/文件夹上方一个目录级别。因此,将 run_server.py 脚本向上移动一个目录级别。例如
$ mv /example/base/server/run_server.py /example/base/run_server.py
在激活虚拟环境并作为 gnuhealth 用户的情况下,运行服务器。
$ python run_server.py
但是,大多数生产服务器使用 nginx、lighttpd 或 apache 位于 Tornado 服务器之前。例如,一种常见的做法是让 nginx 位于多个 Tornado 实例之前,充当负载均衡器,处理 SSL 并提供静态内容(如图像和常用 JavaScript)。如何配置 nginx/lighttpd + tornado + flask 设置超出了本文档的范围,尽管它并不复杂,尤其是在 nginx 的情况下。
确保您以gnuhealth用户身份运行。
Flask-Tryton 应该自动找到并解析 Tryton 配置文件。如果找不到
server/config.py ---------------- TRYTON_CONFIG = '' # Set this to the path of the Tryton configuration file (e.g., '/weird/tryton/weird-tryton.conf')
这与之前的错误有关,并且发生在 Flask-Tryton 找不到 Tryton 配置文件时。按照之前的步骤操作应该可以解决此问题。