Bioblogs

DDBJ 웹 서비스

hongiiv 2007. 10. 25. 09:34
반응형
DDBJ(DNA Data Bank of Japan)는 일본국립유전학연구소(National Institute of Genetics) 산하 기관으로 DNA 염기서열의 데이터베이스를 유럽의 EMBL, 미국의 GenBank와 함께 구축하여 제공하고 있다. DNA 데이터는 DDBJ, EMBL, GenBank중 하나에 등록되지 않으면 저널에 수록되지 않으며 이 3개 기관은 신속하게 처리해 갱신하는 역할을 하고 있다.<표 1>은 DDBJ에서 제공하고 있는 주요 웹 서비스를 보여주고 있다.

표 1. DDBJ에서 제공하는 주요 웹 서비스
1

웹 서비스가 나온지 오랜 시간이 지났지만 아직까지 활발히 사용되지 않고 있는건 아마도 사용하기 까다롭기 때문일 것이다. DDBJ에서는 이러한 어려움을 줄이고 좀더 손 쉬운 방법으로 서비스를 제공하고 있는데 바로 REST(Representational State Transfer) 방식이다. REST는 WWW 인터넷 프로토콜을 통해 XML 문서를 전송하여 애플리케이션을 구축하는 방식으로 개발자들은 HTTP 연결이 지원되는 웹 브라우저나 프로그래밍 언어만을 사용해서 간단하게 프로그래밍이 가능하다. DDBJ는 현재 웹 서비스 형태로 제공되어지는 모든 서비스에 대해서 REST 방식으로도 제공하고 있다. 이번에는 웹 서비스 대신 REST 방식으로 서비스를 호출하여 사용해보도록 하겠다.

DDBJ 에서 REST를 사용하는 방법은 URL과 서비스명, 호출하고자하는 메소드와 인자를 호출하는 방식으로 <리스트 1>과 같다. GetEntry 서비스의 getDDBJEntry 메소드는 DDBJ 데이터베이스의 accession number를 가지고 해당 정보를 Fasta 포맷으로 가져오는 메소드로 accession number가 AB000100에 대한 정보를 가져오는 REST를 호출하면 <리스트 2>와 같다.

리스트 1. DDBJ에서 REST 호출 방식
http://xml.nig.ac.jp/rest/Invoke?service=서비스명&method=호출하고자하는메소드&파라메터들...

리스트 2. AB000100에 해당하는 DDBJ 정보를 가져오는 REST 호출
http://xml.nig.ac.jp/rest/Invoke?service=GetEntry&method=getDDBJEntry&accession=AB000100

이제 이 호출을 HTTP를 지원하는 웹 브라우저를 통해 Post 방식으로 보내거나 Perl, Java, Ruby 등의 프로그래밍 언어를 통해 Post 방식으로 보내면 되기 때문에 SOAP 방식의 웹 서비스에 비해 간단하게 프로그래밍을 할 수 있다. <리스트 3>은 해당 질의 정보를 Post 형태로 보내고 그 결과를 보여주는 Python 코드로 HTTP 헤더 정보와 POST 방식의 Request를 만들어 보내는 간단한 코드로 구성되어 있다.

리스트 3. AB000100에 해당하는 DDBJ 정보를 가져오는 Python 프로그램 (rest.py)
      import httplib, urllib

      con = httplib.HTTP('xml.nig.ac.jp')
      params = urllib.urlencode(
        {'service':'GetEntry', 'method':'getDDBJEntry', 'accession':'AB000100'})

      con.putrequest('POST', '/rest/Invoke')
      con.putheader('Host', 'xml.nig.ac.jp')
      con.putheader('User-Agent', 'python/socket')
      con.putheader('Content-type', 'application/x-www-form-urlencoded')
      con.putheader('Content-length', '%d' % len(params))
      con.endheaders()

      con.send(params)

      code, msg, header = con.getreply()
      r = con.getfile().read()

      print r
      con.close()

반응형