RubyGems 導覽選單
指南

用於 Bundler 相依性解析的精簡索引 API 詳細資料

精簡索引 API

精簡索引 API 被視為穩定的公開 API。

主要索引檔案是 versions 檔案,其中提供每個 rubygem info 檔案的名稱、版本和 MD5 校驗和。

如果您需要收集所有 rubygem 的所有資訊,請使用 rubygems.org 資料庫的 公開資料轉儲

擷取和快取

範例回應(忽略一些標頭)

$ curl -I https://rubygems.org/info/bundler

HTTP/2 200
last-modified: Fri, 22 Mar 2024 13:09:59 GMT
etag: "40148273a7c7cd16b49d00a9935fd445"
cache-control: max-age=60, public
content-type: text/plain; charset=utf-8
repr-digest: sha-256="pf7Ts7NTRac//JxO9ke3IYbcWx8kcVn9N0mbm5EJpP0="
accept-ranges: bytes

所有精簡索引端點都支援使用 If-None-Match 標頭的 ETag。

If-None-Match: "40148273a7c7cd16b49d00a9935fd445"

精簡索引的設計是使用 HTTP Range 標頭擷取。當存在先前擷取的副本時,範圍要求會利用附加行模式。

Range: bytes=#{range_start}-

來自 /versions/info/[GEM] 端點的回應將包含 Repr-Digest 標頭。摘要至少會包含整個檔案的 SHA256 檢查碼,無論回應包含完整檔案或部分回應。請注意,Digest 標頭存在,但已棄用,可能會在未通知的情況下移除。

當範圍標頭滿足時,請在起始位元組處附加內容,然後計算結果檔案的 SHA256 檢查碼。如果結果與 Repr-Digest 標頭的 SHA256 檢查碼相符,則檔案會被視為完整且最新。

/versions 檔案中的每一行都包含在撰寫該行時,對應 /info 檔案的最新 MD5 計算。檔案末尾最接近的最新 MD5,將與最新 /info 檔案的 MD5 相符。

可以在 Bundler CompactIndexClient::Updater 中找到確切的實作詳細資訊。

GET - /versions

傳回包含所有 RubyGem 所有版本的資訊的客製化文字格式。

此 API 端點旨在成為所有可能的 RubyGem 版本的精簡索引。當新增 RubyGem 或 RubyGem 版本,或當 RubyGem 被取消時,它會使用下方詳細說明的格式,新增到檔案的結尾。

檔案只會在該月份附加,這會改善快取效能。它會在每個月的開始重新計算,移除已取消的 RubyGem,並將新版本壓縮成每個 RubyGem 的一行。

警告:這是一個大檔案。範例已截斷。

$ curl https://rubygems.org/versions

created_at: 2024-04-01T00:00:05Z
---
- 1 05d0116933ba44b0b5d0ee19bfd35ccc
-A 0.0.0 8b1527991f0022e46140907a7fc4cfd4
.cat 0.0.1 631fd60a806eaf5026c86fff3155c289
.omghi 1,2 7a67c0434100c2ab635b9f4865ee86bd
0mq 0.1.0,0.1.1,0.1.2,0.2.0,0.2.1,0.3.0,0.4.0,0.4.1,0.5.0,0.5.1,0.5.2,0.5.3 6146193f8f7e944156b0b42ec37bad3e
[...SNIP...]
active_model_serializers -0.9.10 7ad37af4aec8cc089e409e1fdec86f3d
active_model_serializers 0.9.11 a6d40e97b289ee6c806e5e9f7031623b
openapi_first 1.4.1 40fbfdebcbfee3863df697e1d641f637

versions 檔案格式

versions 檔案的格式在計算時,會針對每個 RubyGem 使用一行,並在結尾附加額外的行,其中可能包含檔案前面已存在的 RubyGem 的新版本或已取消版本。

--- 之前的行應視為不透明的元資料。

created_at: 2024-04-01T00:00:05Z
--- 

每一行都會提供 1 個 RubyGem 的資訊,格式如下

RUBYGEM [-]VERSION_PLATFORM[,VERSION_PLATFORM],...] MD5

此行的各個部分如下

  1. RUBYGEM - rubygem 的名稱。
  2. (SPACE) - 空白字元。
  3. [(MINUS)] - (選用) - (減號) 字元。僅在後面的版本在 versions 檔案最後一次重新計算後被撤銷時才會出現。
  4. VERSION_PLATFORM - rubygem VERSION,可能包含 PLATFORM。此組合格式在 info 檔案格式部分中有更詳細的說明。
  5. [(COMMA)VERSION] - (選用) , (逗號) 字元,表示後面還會有另一個 VERSION。讀取逗號分隔的 VERSION 塊,直到遇到空白為止。
  6. (SPACE) - 空白字元。
  7. MD5 - rubygem「info」檔案的 MD5,如下所述。在 versions 檔案中,gem 名稱的最後一個 MD5 才應視為相關 info 檔案的正確 MD5。

如需更多詳細資訊,請參閱 Bundler 中的剖析器

GET - /info/<RUBYGEM>

傳回 <RUBYGEM> 所指定的單一 rubygem 的自訂文字格式,rubygem 的每個版本各一行。

範例已截斷。

$ curl https://rubygems.org/info/rails

---
2.2.2 actionmailer:= 2.2.2,actionpack:= 2.2.2,activerecord:= 2.2.2,activeresource:= 2.2.2,activesupport:= 2.2.2,rake:>= 0.8.3|checksum:84fd0ee92f92088cff81d1a4bcb61306bd4b7440b8634d7ac3d1396571a2133f
2.3.2 actionmailer:= 2.3.2,actionpack:= 2.3.2,activerecord:= 2.3.2,activeresource:= 2.3.2,activesupport:= 2.3.2,rake:>= 0.8.3|checksum:ac61e0356987df34dbbafb803b98f153a663d3878a31f1db7333b7cd987fd044
2.0.5 actionmailer:= 2.0.5,actionpack:= 2.0.5,activerecord:= 2.0.5,activeresource:= 2.0.5,activesupport:= 2.0.5,rake:>= 0.7.2|checksum:5e8a6e36f2537b795b7bb237e2aea18a166349e1e54e463a64beba5ae84cd406
[...SNIP...]
7.0.8.1 actioncable:= 7.0.8.1,actionmailbox:= 7.0.8.1,actionmailer:= 7.0.8.1,actionpack:= 7.0.8.1,actiontext:= 7.0.8.1,actionview:= 7.0.8.1,activejob:= 7.0.8.1,activemodel:= 7.0.8.1,activerecord:= 7.0.8.1,activestorage:= 7.0.8.1,activesupport:= 7.0.8.1,bundler:>= 1.15.0,railties:= 7.0.8.1|checksum:7deb37884ac5e9afeaeb6ad503c56e819f68e53746d621b2187322f874ba2ded,ruby:>= 2.7.0,rubygems:>= 1.8.11
7.1.3.1 actioncable:= 7.1.3.1,actionmailbox:= 7.1.3.1,actionmailer:= 7.1.3.1,actionpack:= 7.1.3.1,actiontext:= 7.1.3.1,actionview:= 7.1.3.1,activejob:= 7.1.3.1,activemodel:= 7.1.3.1,activerecord:= 7.1.3.1,activestorage:= 7.1.3.1,activesupport:= 7.1.3.1,bundler:>= 1.15.0,railties:= 7.1.3.1|checksum:73aa0775e7dc698cebad542de2eea6d5b62957290e6a23a96e915281df36f026,ruby:>= 2.7.0,rubygems:>= 1.8.11
7.1.3.2 actioncable:= 7.1.3.2,actionmailbox:= 7.1.3.2,actionmailer:= 7.1.3.2,actionpack:= 7.1.3.2,actiontext:= 7.1.3.2,actionview:= 7.1.3.2,activejob:= 7.1.3.2,activemodel:= 7.1.3.2,activerecord:= 7.1.3.2,activestorage:= 7.1.3.2,activesupport:= 7.1.3.2,bundler:>= 1.15.0,railties:= 7.1.3.2|checksum:2d787a65e87b70ee65f9d1cb644aaa5bb80eea12298982f474da949772c1bfa0,ruby:>= 2.7.0,rubygems:>= 1.8.11

info 檔案格式

info 檔案的格式每行一個版本。當新增新版本時,會將額外的行附加到檔案的結尾。

當版本被撤銷時,info 檔案會重新計算。檔案中絕不會將版本列為已撤銷。它只會從檔案中排除。

--- 之前的所有行都應視為不透明。

---

後面的每一行都會提供 rubygem 1 個版本的資訊,格式如下

VERSION[-PLATFORM] [DEPENDENCY[,DEPENDENCY,...]]|REQUIREMENT[,REQUIREMENT,...]

每一行的各個部分如下

  1. VERSION - rubygem 的版本。讀取 VERSION,直到遇到 - (減號) 或空白字元為止。
  2. [-PLATFORM] - 如果不是預設平台 ruby,則為平台。在 VERSION[-PLATFORM] 塊中的第一個 - (減號) 字元會將 VERSION 和 PLATFORM 分開。PLATFORM 可能包含更多連字符。讀取平台,直到遇到空白為止。
  3. (SPACE) - 空白字元。
  4. [DEPENDENCY] - (選用) 相依性是此 gem 所需要的另一個 rubygem。DEPENDENCY 可能包含空白。格式請參閱下方。
  5. [(逗號)依賴關係] - (選用) 一個 , (逗號) 字元,表示另一個 DEPENDENCY 將會接續。讀取逗號分隔的 DEPENDENCY 塊,直到遇到 | (直線) 字元。
  6. (直線) - | (直線) 字元。
  7. 需求 - rubygem 的其他需求,其中總是至少包含 SHA256 校驗和。需求可能包含空格。請參閱下方格式。
  8. [(逗號)需求] - (選用) 一個 , (逗號) 字元,表示另一個需求將會接續。讀取逗號分隔的需求塊,直到行尾。

依賴關係 格式

範例

actionmailer:= 2.2.2
parser:>= 3.2.2.3
rainbow:< 4.0
unicode-display_width:< 3.0&>= 2.4.0
rack:~> 1.0
tilt:!= 1.3.0&~> 1.1

格式

GEM:CONSTRAINT[&CONSTRAINT]
  1. RUBYGEM - 所依賴的 rubygem。
  2. (冒號) - : (冒號) 字元。
  3. 約束 - 版本約束。一個在 [=, >, <, >=, <=, ~>, !=] 中的運算子,然後是一個(選用的)空格字元,然後是一個版本。
  4. [(&符號)約束] - 一個 & (&符號) 字元,表示一個與相同 GEM 相關的附加約束將會接續。讀取&符號分隔的約束塊,直到遇到 , (逗號) 字元。

需求 格式

需求塊將總是包含 checksum 鍵。rubyrubygems 鍵就像上方的約束,表示一個必要的 ruby 或 rubygems 版本。

checksum 是最初上傳到 rubygems.org 的 GEM-VERSION-PLATFORM.gem 檔案的 SHA256 校驗和。從匹配的下載 .gem 檔案計算出來的 SHA256 必須與這個校驗和相符,否則 .gem 檔案必須被視為已損毀。

範例

checksum:2c4af8d4a65ac5290445bfe7582be4490162d6934f49d76858b55647b4c4428d
ruby:< 3.3.dev&>= 2.7
rubygems:>= 1.8.11

格式

KEY:VALUE
  1. - 一個字母數字鍵。
  2. (冒號) - 一個 : (冒號) 字元。
  3. - 鍵的值。值不得包含 , (逗號) 或 : (冒號) 字元。

GET - /names

傳回所有 rubygem 名稱的客製化文字格式,每行一個 rubygem 名稱。

目前沒有任何官方 rubygems 工具使用此 API。順序可能會變更。範例已截斷。

$ curl https://rubygems.org/names

---
_
-
0mq
0xdm5
[...SNIP...]

names 檔案格式

names 檔案格式為以換行符號分隔的簡單 rubygem 名稱清單。

--- 之前的所有行都應視為不透明。

---

每一行只包含一個 rubygem 名稱

RUBYGEM

此行的各個部分如下

  1. RUBYGEM - rubygem 的名稱。