कोड की 48k से 10 लाइनें - GitHub JavaScript SDK कहानी


@octokit/restमूल रूप से GitHub का मूल विकास नहीं है, और github का एक अनुकूलन है - उपयोगकर्ता @bkeepers से 2017 का सबसे लोकप्रिय पैकेज इस पोस्ट में हम GitHub REST API के@octokit/rest लिए आधिकारिक जावास्क्रिप्ट SDK के बारे में बात करेंगे


ग्रेगर (लेख के लेखक) ऑक्टोकिट जावास्क्रिप्ट डेवलपर हैं। वह एक अनुभवी ओपन सोर्स डेवलपर है, जो टास्क ऑटोमेशन के लिए एक विशेष प्यास और सभी प्रकार और व्यवसायों के योगदानकर्ताओं के लिए प्रवेश सीमा को कम करता है। Octokit के अलावा, ग्रेगर पर काम कर रहा है Probot , काटने का निशान, और अर्थ रिलीजअपने खाली समय में, वह अपने तीनों Nico, Ada और Kiana की देखभाल करता है। DEV समुदाय और ट्विटर पर अधिक ग्रेगर सामग्री पाई जा सकती है

विरासत


@octokit/rest, github Node. 2010 . Node v0.1, package.json , npm .


2017 GitHub , github GitHub API JavaScript SDK Node.js. 2017 . 16 , JavaScript , JSON TypeScript/Flow.


➜  rest.js git:(50720c8) wc -l lib/*
     120 lib/error.js
    3246 lib/index.d.ts
     905 lib/index.js
    3232 lib/index.js.flow
      17 lib/promise.js
    7995 lib/routes.json
     143 lib/util.js
   15658 total


. routes.json 8 , REST API GitHub. , / .


, (octokit/routes) REST API GitHub JSON. routes.json. , @octokit/rest PR routes.json, . , routes.json REST API GitHub 10 275 . TypeScript 26 700 .



API , : .


. : "decomposability", "", . " ", " " "".

JavaScript Octokit JavaScript, . , . , , REST API, ( ""), . , .


, 2018 :



:
,


➜  rest.js git:(f7c9f86) wc -l index.* lib/**/*.{js,json}
      31 index.js
    3474 index.d.ts
    3441 index.js.flow

     101 lib/endpoint/ # 4 files
     162 lib/request/ # 3 files

      83 lib/plugins/authentication/ # 3 files
     130 lib/plugins/endpoint-methods/ # 4 files
     130 lib/plugins/pagination/ # 11 files

      58 lib/parse-client-options.js
   10628 lib/routes.json

   18238 total

:



2018 , , v16 API . , .


:
,


➜  rest.js git:(01763bf) wc -l index.* plugins/**/*.{js,json} lib/**/*.js
      14 index.js
   26714 index.d.ts

     110 lib/ # 6 files

      86 plugins/authentication/ # 3 files
      77 plugins/pagination/ # 3 files
      39 plugins/register-endpoints/ # 3 files
     108 plugins/validate/ # 2 files
   10275 plugins/rest-api-endpoints/routes.json
   37423 total

@octokit/core — Octokit JavaScript, @octokit/rest Octokit. @octokit/rest . @octokit/rest, .


@octokit/core legacy , . — README @octokit/auth. GitHub, (eng).


@octokit/core lib/* plugins/authentication/*. , :



validate TypeScript . . , octokit.checks.create():


{
  checks: {
    create: {
      headers: { accept: "application/vnd.github.antiope-preview+json" },
      method: "POST",
      params: {
        actions: { type: "object[]" },
        "actions[].description": { required: true, type: "string" },
        "actions[].identifier": { required: true, type: "string" },
        "actions[].label": { required: true, type: "string" },
        completed_at: { type: "string" },
        conclusion: {
          enum: [
            "success",
            "failure",
            "neutral",
            "cancelled",
            "timed_out",
            "action_required"
          ],
          type: "string"
        },
        details_url: { type: "string" },
        external_id: { type: "string" },
        head_sha: { required: true, type: "string" },
        name: { required: true, type: "string" },
        output: { type: "object" },
        "output.annotations": { type: "object[]" },
        "output.annotations[].annotation_level": {
          enum: ["notice", "warning", "failure"],
          required: true,
          type: "string"
        },
        "output.annotations[].end_column": { type: "integer" },
        "output.annotations[].end_line": { required: true, type: "integer" },
        "output.annotations[].message": { required: true, type: "string" },
        "output.annotations[].path": { required: true, type: "string" },
        "output.annotations[].raw_details": { type: "string" },
        "output.annotations[].start_column": { type: "integer" },
        "output.annotations[].start_line": { required: true, type: "integer" },
        "output.annotations[].title": { type: "string" },
        "output.images": { type: "object[]" },
        "output.images[].alt": { required: true, type: "string" },
        "output.images[].caption": { type: "string" },
        "output.images[].image_url": { required: true, type: "string" },
        "output.summary": { required: true, type: "string" },
        "output.text": { type: "string" },
        "output.title": { required: true, type: "string" },
        owner: { required: true, type: "string" },
        repo: { required: true, type: "string" },
        started_at: { type: "string" },
        status: { enum: ["queued", "in_progress", "completed"], type: "string" }
      },
      url: "/repos/:owner/:repo/check-runs"
    }
  }
}

v17, :


{
  checks: {
    create: [
      "POST /repos/{owner}/{repo}/check-runs",
      { mediaType: { previews: ["antiope"] } },
    ];
  }
}

, 10 :


import { Octokit as Core } from "@octokit/core";
import { requestLog } from "@octokit/plugin-request-log";
import { paginateRest } from "@octokit/plugin-paginate-rest";
import { restEndpointMethods } from "@octokit/plugin-rest-endpoint-methods";

import { VERSION } from "./version";

export const Octokit = Core.plugin([
  requestLog,
  paginateRest,
  restEndpointMethods,
]).defaults({ userAgent: `octokit-rest.js/${VERSION}` });


v16 v17, — .


2017 , . , JavaScript Octokit SDK SDK , octokit/fixtures — , http .


, @octokit/rest, 100% . , 100% .


. : ,

v17 10 , v16, API. , , v17, @octokit/rest . , @octokit/core @octokit/request. smoke- @octokit/fixtures.



@octokit/rest REST API GitHub, 17 , JavaScript, API @octokit/rest, , . GraphQL, @octokit/core.


अंत में, मैं फेबियन जैकब्स , माइक डी बोअर और जो गैलो को धन्यवाद कहना चाहूंगा , जिन्होंने githubइसे चालू करने से पहले मॉड्यूल बनाया और बनाए रखा @octokit/rest


All Articles