RubyGems Navigation menu
가이드

HTTP를 통한 RubyGems.org와의 통신 자세히 보기

주의: API는 작업 중이고, 도움이 필요합니다! RubyGems 자체와 gemcutter gem은 gem을 넣고 소유자를 추가하고 그 밖의 다른 일을 하기 위해 API를 사용합니다.

API 인증

어떤 API 통신은 인증 헤더가 필요합니다. API 키를 찾으려면, RubyGems.org에 로그인한 이후 당신의 유저 이름을 클릭해서 ‘Edit Profile’을 클릭합니다. 여기에 API 키를 사용하는 예가 있습니다.

$ curl -H 'Authorization:YOUR_API_KEY' \
  https://rubygems.org/api/v1/some_api_call.json

루비 라이브러리

RubyGems.org와 루비로 통신 할 수도 있습니다.

gems 클라이언트는 밑에 나열된 모든 방법의 루비 인터페이스를 제공합니다. 이 라이브러리는 README에 있는 기본 사용 예를 포함한 전체 문서를 가지고 있습니다. 이 라이브러리는 다음 명령으로 설치할 수 있습니다.

gem install gems

Gem 메소드

GET - /api/v1/gems/[GEM NAME].(json|yaml)

주어진 gem의 기본 정보를 반환합니다. 밑은 “rails” gem의 정보를 JSON 형식으로 응답한 예제입니다.

$ curl https://rubygems.org/api/v1/gems/rails.json

{
  "name": "rails",
  "downloads": 7528417,
  "version": "3.2.1",
  "version_downloads": 47602,
  "authors": "David Heinemeier Hansson",
  "info": "Ruby on Rails is a full-stack web framework optimized for programmer
          happiness and sustainable productivity. It encourages beautiful code
          by favoring convention over configuration.",
  "project_uri": "http://rubygems.org/gems/rails",
  "gem_uri": "http://rubygems.org/gems/rails-3.2.1.gem",
  "homepage_uri": "http://www.rubyonrails.org",
  "wiki_uri": "http://wiki.rubyonrails.org",
  "documentation_uri": "http://api.rubyonrails.org",
  "mailing_list_uri": "http://groups.google.com/group/rubyonrails-talk",
  "source_code_uri": "http://github.com/rails/rails",
  "bug_tracker_uri": "http://github.com/rails/rails/issues",
  "dependencies": {
    "development": [],
    "runtime": [
      {
        "name": "actionmailer",
        "requirements":"= 3.2.1"
      },
      {
        "name": "actionpack",
        "requirements": "= 3.2.1"
      },
      {
        "name": "activerecord",
        "requirements": "= 3.2.1"
      },
      {
        "name": "activeresource",
        "requirements": "= 3.2.1"
      },
      {
        "name": "activesupport",
        "requirements": "= 3.2.1"
      },
      {
        "name": "bundler",
        "requirements": "~> 1.0"
      },
      {
        "name": "railties",
        "requirements": "= 3.2.1"
      }
    ]
  }
}
}

GET - /api/v1/search.(json|yaml)?query=[YOUR QUERY]

사이트에서 검색을 하는 것처럼 Gemcutter에 검색을 합니다. 일치한 gem의 정보를 JSON이나 YAML의 배열로 반환합니다.

$ curl 'https://rubygems.org/api/v1/search.json?query=cucumber'

$ curl 'https://rubygems.org/api/v1/search.yaml?query=cucumber'

결과는 페이지로 구분되며 API 호출은 처음 30개의 일치된 값만 반환합니다. 다음 결과를 얻으려면, 빈 결과가 나오기 전까지 페이지 쿼리 매개변수를 사용하시면 됩니다.

$ curl 'https://rubygems.org/api/v1/search.json?query=cucumber&page=2'

GET - /api/v1/gems.(json|yaml)

소유한 모든 gem을 나열합니다. 소유한 gem의 정보를 JSON이나 YAML의 배열로 반환합니다.

$ curl -H 'Authorization:701243f217cdf23b1370c7b66b65ca97' \
          https://rubygems.org/api/v1/gems.json

POST - /api/v1/gems

RubyGems.org에 gem을 보냅니다. 빌드한 루비 gem을 리퀘스트 보디에 넣어서 전송(post)해야 합니다.

$ curl --data-binary @gemcutter-0.2.1.gem \
       -H 'Authorization:701243f217cdf23b1370c7b66b65ca97' \
       https://rubygems.org/api/v1/gems

Successfully registered gem: gemcutter (0.2.1)

DELETE - /api/v1/gems/yank

RubyGems.org의 목록에서 gem을 제거합니다. 플랫폼은 선택적입니다.

$ curl -X DELETE -H 'Authorization:701243f217cdf23b1370c7b66b65ca97' \
       -d 'gem_name=bills' -d 'version=0.0.1' \
       -d 'platform=x86-darwin-10' \
       https://rubygems.org/api/v1/gems/yank

Successfully yanked gem: bills (0.0.1)

PUT - /api/v1/gems/unyank

제거된 gem을 다시 RubyGems.org의 목록으로 업데이트 합니다. 플랫폼은 선택적입니다.

$ curl -X PUT -H 'Authorization:701243f217cdf23b1370c7b66b65ca97' \
       -d 'gem_name=bills' -d 'version=0.0.1' \
       -d 'platform=x86-darwin-10' \
       https://rubygems.org/api/v1/gems/unyank

Successfully unyanked gem: bills (0.0.1)

Gem 버전 메소드

GET - /api/v1/versions/[GEM NAME].(json|yaml)

밑에 나온 것처럼 gem 버전의 상세정보를 반환합니다.

$ curl https://rubygems.org/api/v1/versions/coulda.json

[
  {
    "authors" : "Evan David Light",
    "built_at" : "2011-08-08T04:00:00.000Z",
    "description" : "Behaviour Driven Development derived from Cucumber but as an internal DSL with methods for reuse",
    "downloads_count" : 2224,
    "number" : "0.7.1",
    "summary" : "Test::Unit-based acceptance testing DSL",
    "platform" : "ruby",
    "ruby_version" : nil,
    "prerelease" : false,
    "licenses" : nil,
    "requirements" : nil,
    "sha" : "777c3a7ed83e44198b0a624976ec99822eb6f4a44bf1513eafbc7c13997cd86c"
  }
]

Gem 다운로드 메소드

GET - /api/v1/downloads.(json|yaml)

RubyGems의 총 다운로드 수가 담긴 객체를 반환합니다.

$ curl https://rubygems.org/api/v1/downloads.json

{
  "total": 461672727
}

GET - /api/v1/downloads/[GEM NAME]-[GEM VERSION].(json|yaml)

특정 gem의 총 다운로드 수와 특정 버전의 총 다운로드 수가 담긴 객체를 반환합니다.

$ curl https://rubygems.org/api/v1/downloads/rails_admin-0.0.0.json

{
  "version_downloads": 3142,
  "total_downloads": 3142
}

소유자 메소드

GET - /api/v1/owners/[USER HANDLE]/gems.(json|yaml)

사용자의 모든 gem을 봅니다. 이것은 사용자가 푸시할 수 있는 모든 gem입니다.

$ curl https://rubygems.org/api/v1/owners/qrush/gems.json

[
  {
    "name": "factory_girl",
...
  },
...
]

GET - /api/v1/gems/[GEM NAME]/owners.(json|yaml)

gem의 모든 소유자를 봅니다. 이 사용자들은 이 gem을 푸시할 수 있습니다.

$ curl https://rubygems.org/api/v1/gems/gemcutter/owners.json

[
  {
    "email": "nick@gemcutter.org"
  },
  {
    "email": "ddollar@gmail.com"
  }
]

POST - /api/v1/gems/[GEM NAME]/owners

소유하고 있는 루비 gem에 소유자를 추가합니다. 그 사용자에게 gem을 관리할 수 있는 권한을 줍니다.

$ curl -H 'Authorization:701243f217cdf23b1370c7b66b65ca97' \
       -F 'email=josh@technicalpickles.com' \
       https://rubygems.org/api/v1/gems/gemcutter/owners

Owner added successfully.

DELETE - /api/v1/gems/[GEM NAME]/owners

소유하고 있는 루비 gem의 사용자 관리 권한을 제거합니다.

$ curl -X DELETE -H 'Authorization:701243f217cdf23b1370c7b66b65ca97' \
        -d "email=josh@technicalpickles.com" \
        https://rubygems.org/api/v1/gems/gemcutter/owners

Owner removed successfully.

웹훅 메소드

GET - /api/v1/web_hooks.(json|yaml)

당신의 계정에 등록된 웹훅을 나열합니다.

$ curl -H 'Authorization:701243f217cdf23b1370c7b66b65ca97' \
       https://rubygems.org/api/v1/web_hooks.json

{
  "all gems": [
    {
      "url": "http://gemwhisperer.heroku.com",
      "failure_count": 1
    }
  ],
  "rails": [
    {
      "url": "http://example.com",
      "failure_count": 0
    }
  ]
}

POST - /api/v1/web_hooks

웹훅을 만듭니다. gem_nameurl 두 매개변수가 필요합니다. gem_name 매개변수에 *를 넣으면, 전체 gem의 훅에 적용할 수 있습니다.

$ curl -H 'Authorization:701243f217cdf23b1370c7b66b65ca97' \
       -F 'gem_name=rails' -F 'url=http://example.com' \
       https://rubygems.org/api/v1/web_hooks

Successfully created webhook for rails to http://example.com

$ curl -H 'Authorization:701243f217cdf23b1370c7b66b65ca97' \
       -F 'gem_name=*' -F 'url=http://example.com' \
       https://rubygems.org/api/v1/web_hooks

Successfully created webhook for all gems to http://example.com

DELETE - /api/v1/web_hooks/remove

웹훅을 제거합니다. gem_nameurl 두 매개변수가 필요합니다. gem_name 매개변수에 *를 넣으면, 전체 gem의 훅에 적용할 수 있습니다.

$ curl -X DELETE -H 'Authorization:701243f217cdf23b1370c7b66b65ca97' \
       -d 'gem_name=rails' -d 'url=http://example.com' \
       https://rubygems.org/api/v1/web_hooks/remove

Successfully removed webhook for rails to http://example.com

$ curl -X DELETE -H 'Authorization:701243f217cdf23b1370c7b66b65ca97' \
       -d 'gem_name=*' -d 'url=http://example.com' \
       https://rubygems.org/api/v1/web_hooks/remove

Successfully removed webhook for all gems to http://example.com

POST - /api/v1/web_hooks/fire

웹훅을 시험삼아 실행해 봅니다. 애플리케이션을 개발 중일 때와 같은 경우, 이를 사용해 언제나 엔드포인트를 테스트할 수 있습니다. gem_nameurl 두 매개변수가 필요합니다.gem_name 매개변수에 *를 넣으면, 전체 gem의 훅에 적용할 수 있습니다.

Authorization 헤더는 실행된 모든 웹훅에 포함되어 요청이 RubyGems.org로부터 온 것인지 확신할 수 있습니다. 이 헤더에는 gem 이름, gem 버전, API 키를 이어 붙여 SHA2로 해시된 값이 들어갑니다.

$ curl -H 'Authorization:701243f217cdf23b1370c7b66b65ca97' \
       -F 'gem_name=rails' -F 'url=http://example.com' \
       https://rubygems.org/api/v1/web_hooks/fire

Successfully deployed webhook for rails to http://example.com

$ curl -H 'Authorization:701243f217cdf23b1370c7b66b65ca97' \
       -F 'gem_name=*' -F 'url=http://example.com' \
       https://rubygems.org/api/v1/web_hooks/fire

Successfully deployed webhook for all gems to http://example.com

활동 메소드

GET - /api/v1/activity/latest

RubyGems.org에 (처음) 추가된 최신 gem을 50 개 가져옵니다. gem의 정보는 JSON이나 YAML의 배열로 반환합니다.

$ curl 'https://rubygems.org/api/v1/activity/latest.json'

GET - /api/v1/activity/just_updated

최근에 업데이트된 gem을 50 개 가져옵니다. gem 버전 정보를 JSON이나 YAML의 배열로 반환합니다.

$ curl 'https://rubygems.org/api/v1/activity/just_updated.json'

기타 메소드

GET - /api/v1/api_key.(json|yaml)

HTTP 기본 인증으로 API 키를 가져옵니다.

$ curl -u "nick@gemcutter.org:schwwwwing" \
       https://rubygems.org/api/v1/api_key.json

{
  "rubygems_api_key": "701243f217cdf23b1370c7b66b65ca97"
}

GET - /api/v1/dependencies?gems=[COMMA DELIMITED GEM NAMES]

주어진 gem의 모든 버전의 정보를 정렬된 해시 배열로 반환합니다. 각 해시는 gem 버전과 그 의존성을 포함합니다. 이 정보는 의존성을 해결할 때 유용합니다.

$ ruby -ropen-uri -rpp -e \
  'pp Marshal.load(open("https://rubygems.org/api/v1/dependencies?gems=rails,thor"))'

[{:platform=>"ruby",
  :dependencies=>
   [["bundler", "~> 1.0"],
    ["railties", "= 3.0.3"],
    ["actionmailer", "= 3.0.3"],
    ["activeresource", "= 3.0.3"],
    ["activerecord", "= 3.0.3"],
    ["actionpack", "= 3.0.3"],
    ["activesupport", "= 3.0.3"]],
  :name=>"rails",
  :number=>"3.0.3"},
...
{:number=>"0.9.9", :platform=>"ruby", :dependencies=>[], :name=>"thor"}]