37

github API は、json のページネーション データを http リンク ヘッダーで送信します。

Link: <https://api.github.com/repos?page=3&per_page=100>; rel="next",
<https://api.github.com/repos?page=50&per_page=100>; rel="last"

github API はこのメソッドを使用する唯一の API ではないので (私は思う)、誰かがリンク ヘッダーを解析する (そして、たとえば配列に変換する) ための便利な小さなスニペットを持っているかどうかを尋ねたいと思いました。 js アプリ。

私はぐるぐる回ったが、json APIからページネーションを解析する方法に関して何も役に立たなかった

4

12 に答える 12

21

parse-link-header NPM モジュールは、この目的のために存在します。そのソースは、MIT ライセンス (商用利用は無料) の下で github で見つけることができます。

インストールは次のように簡単です。

npm install parse-link-header

使用法は次のようになります。

var parse = require('parse-link-header');
var parsed = parse('<https://api.github.com/repos?page=3&per_page=100>; rel="next", <https://api.github.com/repos?page=50&per_page=100>; rel="last"')

...その後にparsed.nextparsed.lastなどがあります:

{ next:
   { page: '3',
     per_page: '100',
     rel: 'next',
     url: 'https://api.github.com/repos?page=3&per_page=100' },
  last:
   { page: '50',
     per_page: '100',
     rel: 'last',
     url: ' https://api.github.com/repos?page=50&per_page=100' } }
于 2015-04-30T17:36:08.927 に答える
8

私はこのGistを見つけました:

JavaScript でGithubLinksヘッダーを解析する

Github API でテストしたところ、次のようなオブジェクトが返されました。

var results = {
    last: "https://api.github.com/repositories/123456/issues?access_token=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX&state=open&since=2013-07-24T02%3A12%3A30.309Z&direction=asc&page=4"
    next: "https://api.github.com/repositories/123456/issues?access_token=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX&state=open&since=2013-07-24T02%3A12%3A30.309Z&direction=asc&page=2"
};
于 2013-08-23T13:30:41.747 に答える
6

github でwombleton/link-headersを見つけました。npm モジュールではなく、ブラウザー用に作成されているように見えますが、サーバー側の環境で動作するように変更することは難しくないようです。pegjs を使用して、文字列の分割ではなく実際の RFC 5988 パーサーを生成するため、Github だけでなく、任意のリンク ヘッダーに対してうまく機能するはずです。

于 2013-05-26T14:05:51.783 に答える
2

Python を使用でき、完全な仕様を実装したくないが、Github API で機能するものが必要な場合は、次のようにします。

import re
header_link = '<https://api.github.com/repos?page=3&per_page=100>; rel="next", <https://api.github.com/repos?page=50&per_page=100>; rel="last"'
if re.search(r'; rel="next"', header_link):
    print re.sub(r'.*<(.*)>; rel="next".*', r'\1', header_link)
于 2015-09-30T07:23:29.290 に答える