OpenStack 디자인 및 구현 5 - RESTful API 와 WSGI
Tips: 글 은 @ xingjiarong 을 읽 고 감 사 드 리 기 위 한 공유 입 니 다. 먼저 작가 에 게 감 사 를 표 하고 원문 주 소 를 첨부 합 니 다.http://blog.csdn.net/xingjiarong
0. 머리말
지난 블 로그 에서 우 리 는 OpenStack 각 프로젝트 내부 의 서비스 프로 세 스 는 메시지 버스 를 통 해 통신 되 고 각 프로젝트 간 에는 RESTful API 를 통 해 통신 된다 고 언급 한 적 이 있다. 이 블 로그 에서 우 리 는 OpenStack 각 프로젝트 간 의 통신 에 대해 상세 하 게 토론 할 것 이다. 1. RESTful 이란 무엇 인가
RESTful 은 현재 가장 유행 하 는 인터넷 소프트웨어 구조 이다.REST (Representational State Transfer, 서술 적 상태 이전) 는 하나의 구조 가 REST 원칙 에 부합 하면 RESTful 구조 라 고 부른다. RESTful 구조의 핵심 개념 은 바로 '자원' 이다. RESTful 의 세계 에서 인터넷 의 모든 것 은 자원 이다. 예 를 들 어 텍스트, 그림 한 장 은 자원 으로 볼 수 있다.모든 자원 은 특정한 URI (자원 포 지 셔 닝 문자 통일) 에 대응 하여 표 시 됩 니 다. 모든 자원 은 여러 가지 표현 형식 이 있 는데 우리 가 인터넷 에 접속 하 는 과정 은 바로 자원 의 URI 를 호출 하여 서로 다른 표현 형식 을 얻 는 과정 이다.즉, 서버 는 자원 의 각종 표현 형식 을 저장 하고 클 라 이언 트 는 HTTP 의 몇 가지 기본 동작 을 사용 할 수 있다. 이 는 GET, POST, PUT 등 을 포함 하여 서버 의 자원 을 '상태 전환' 시 킬 수 있다. 이것 이 바로 '표현 적 상태 이전' 이 라 고 부 르 는 이유 이다. OpenStack 각 프로젝트 는 RESTful 구조의 API 를 대외 적 으로 제공 하 는 인터페이스 로 제공 했다. 즉, OpenStack 은 많은 자원 을 정의 하고 이런 자원 에 대한 각종 조작 함 수 를 실현 했다.OpenStack 의 API 서비스 프로 세 스 가 클 라 이언 트 의 HTTP 요청 을 받 았 을 때 이른바 '경로' 모듈 은 요청 한 URL 을 해당 하 는 자원 으로 전환 시 키 고 적당 한 조작 함수 로 이동 합 니 다. nova list 명령 을 예 로 들 어 구체 적 인 절 차 를 살 펴 보 겠 습 니 다. 우선 클 라 이언 트 가 http 로 요청 을 보 내 는 것 은 nova list 명령 을 호출 하 는 것 을 설명 합 니 다. Rails 는 OpenStack 에서 사용 하 는 경로 모듈 로 HTTP 요청 을 받 은 후 이 요청 을 해당 하 는 Controller 에 할당 하고 action 을 연결 합 니 다. 모든 컨트롤 러 는 하나의 RESTful 자원 에 대응 하여 이 자원 에 대한 작업 집합 을 대표 합 니 다. 그 중에서 많은 Action 이 포함 되 어 있 습 니 다. Rails 는 index 를 실행 할 action 을 지정 하기 때문에 이 컨트롤 러 는 index 함 수 를 호출 합 니 다. 2. WSGI 란 무엇 인가
RESTful 은 표준 이 아 닌 디자인 스타일 일 뿐 WSGI (Web Server Gateway Interface, Web 서버 게 이 트 웨 이 인터페이스) 는 python 언어 에서 정의 하 는 웹 서버 와 웹 응용 프로그램 간 또는 프레임 워 크 간 의 유 니 버 설 인터페이스 표준 이다. WSGI 는 교량 의 한 끝 을 서비스 단 또는 네트워크 관문 이 라 고 부 르 고 다른 한 끝 을 응용 단 또는 프레임 단 이 라 고 부 르 며 WSGI 의 역할 은 협의 간 에 전환 하 는 것 이다. WSGI 는 웹 구성 요 소 를 웹 서버 (WSGI Server), 웹 미들웨어 (WSGI Middleware), 웹 응용 프로그램 (WSGI Application) 세 가지 로 나 누 었 다. 웹 서버 는 HTTP 요청 을 받 고 일련의 환경 변 수 를 패키지 합 니 다. WSGI 인터페이스 표준 에 따라 등 록 된 WSGI Application 을 호출 하고 마지막 으로 클 라 이언 트 에 응답 합 니 다. WSGI Application 은 호출 가능 한 Python 대상 으로 두 개의 인 자 를 받 습 니 다. 보통 environ 과 start response 입 니 다. 예 를 들 어 def application (environ, start response): start response ('200 OK', [('Content - Type', 'text / plain')] yield 'Hello World' 매개 변수 environ 은 python 사전 을 가리 키 며 CGI 에서 정 의 된 환경 변 수 는 WSGI 가 정의 한 환경 변 수 를 포함 하고 있 습 니 다. WSGI 응용 은 environ 에서 해당 하 는 요청 과 실행 컨 텍스트 의 모든 정 보 를 얻 을 수 있 습 니 다. 매개 변수 start response 는 리 셋 함 수 를 가리 키 며 리 셋 함 수 는 클 라 이언 트 의 요청 을 수행 하고 결 과 를 되 돌려 줍 니 다. 요청 이 있 을 때 WSGI 서버 는 environ 과 start response 매개 변 수 를 준비 한 다음 WSGI Application 을 호출 하여 요청 한 응답 을 받 습 니 다. WSGI 미들웨어 는 서버 와 애플 리 케 이 션 의 API 를 동시에 구현 하기 때문에 양쪽 에서 조 화 를 이 룰 수 있 습 니 다. 서버 에서 볼 때 미들웨어 는 WSGI 애플 리 케 이 션 이 고, 애플 리 케 이 션 에서 볼 때 미들웨어 는 WSGI 서버 입 니 다. WSGI 미들웨어 는 클 라 이언 트 의 HTTP 요청 경 로 를 다른 애플 리 케 이 션 대상 에 게 전달 한 다음 애플 리 케 이 션 처리 후의 결 과 를 되 돌 릴 수 있 습 니 다.클 라 이언 트 에 게 되 돌려 줍 니 다. 우 리 는 WSGI 미들웨어 를 서버 와 응용 단 이 상호작용 하 는 포장 으로 이해 할 수 있 습 니 다. 서로 다른 미들웨어 의 포장 을 통 해 서로 다른 기능 을 가 집 니 다. 3. Paste 와 Webob
Paste 와 Webob 는 OpenStack 과 밀접 한 관 계 를 가 진 두 구성 요소 입 니 다. 3.1 Paste
OpenStack 은 Paste 의 Deploy 구성 요 소 를 사용 하여 WSGI 서버 와 응용 구축 을 완성 합 니 다. 모든 프로젝트 소스 코드 etc 디 렉 터 리 에 다음 그림 과 같은 Paste 프로필 이 있 습 니 다. Paste 프로필 은 하나의 section 으로 나 뉘 어 있 으 며, 각 section 은 type: name 형식 으로 명명 되 어 있 으 며, 구체 적 으로 는 홈 페이지 소스 코드 를 참고 할 수 있 습 니 다. Paste Deploy 를 사용 하 는 주요 목적 은 프로필 에서 WSGI Application 을 만 드 는 것 입 니 다. 프로필 이 있 으 면 다음 호출 방식 만 사용 하 십시오. wsgi_app = loadapp('config:/path/to/config.ini')
3.2 Webob
Webob 는 WSGI 의 요청 과 응답 을 패 키 징 하여 WSGI 응용 프로그램의 작성 을 간소화 합 니 다. Webob 에서 가장 중요 한 대상 중 하 나 는 webob. Request 입 니 다. WSGI 가 요청 한 environ 인 자 를 패 키 징 합 니 다. 하 나 는 webob. Response 입 니 다. 표준 WSGI 응답 의 모든 요 소 를 포함 합 니 다. 예 를 들 어 원본 WSGI 형식: app iter = my func (environ, start response) webob 패키지 사용 후: def myfunc (req): return webob. Response ('hey there') resp = myfunc (req)