Hướng dẫn lấy danh sách, tạo issue mới trên Github sử dụng Github API v3


  • Trùm cuối

    4bba8ea2-3bd7-4337-85f6-3738488fbb8e-image.png

    Tạo Github API token

    Các bạn vào settings trong profile github của mình và tạo một Token API Key để có thể access và request repos của mình.

    • Vào Settings:

    f57a6dd5-7d68-486d-98de-6d6519da0914-image.png

    Chọn Developer Settings:

    4e44ca46-579a-4a57-8944-895e2fb71362-image.png

    • Tich chọn các option repo:

    repo

    • Tạo token

    af837159-59e9-4813-99ea-b0f8ea306669-image.png

    • Copy token và lưu ở nơi nào đó:

    6be8a4f3-2c3e-4910-a75f-6c6ce00bd97d-image.png

    Bắt tay vào code thôi

    • Tạo Github interface & khai báo các phương thức
    type Github interface {
    	listIssues() []Issue
    	createIssue(Issue) Issue
    }
    
    • Tạo Issue struct, ở đây mình chỉ minh họa với 3 fields chính
    
    type Issue struct {
    	ID    int    `json:"id, omitempty"`
    	Title string `json:"title"`
    	Body  string `json:"body"`
    }
    
    • Khai báo hằng
    const (
    	Token = "Bearer TOKEN_CUA_BAN"
    	URI   = "https://api.github.com/repos/{username_cua_ban}/{repo_name}/issues"
    )
    
    • Viết phương thức tạo 1 issue mới
    func (issue Issue) createIssue(newIssue Issue) Issue {
    	issueStringify, _ := json.Marshal(newIssue)
    	req, _ := http.NewRequest("POST", URI, bytes.NewBuffer(issueStringify))
    
    	req.Header.Set("Authorization", Token)
    
    	client := &http.Client{}
    
    	resp, _ := client.Do(req)
    
    	// In ra response code
    	fmt.Println("\n> Response Status:", resp.Status)
    
    	// Lấy response trả về
    	body, _ := ioutil.ReadAll(resp.Body)
    
    	// Parse json string từ response trả về
    	var iss Issue
    	json.Unmarshal(body, &iss)
    
    	return iss
    }
    
    • Viết phương thức liệt kê danh sách các issues của repo
    func (issue Issue) listIssues() []Issue {
    	req, _ := http.NewRequest("GET", URI, nil)
    
    	req.Header.Set("Authorization", Token)
    
    	client := &http.Client{}
    
    	resp, _ := client.Do(req)
    
    	// In ra response code
    	fmt.Println("\n> Response Status:", resp.Status)
    
    	// Lấy response trả về
    	body, _ := ioutil.ReadAll(resp.Body)
    
    	// Parse json string từ response trả về
    	var issues []Issue
    	json.Unmarshal(body, &issues)
    
    	return issues
    }
    
    • Test chương trình
    func main() {
    	newIssue := Issue{
    		Title: "fix bug 2",
    		Body:  "bug bug bug",
    	}
    	issues := Github(Issue{})
    	fmt.Println(issues.createIssue(newIssue))
    	fmt.Println(issues.listIssues())
    }
    

    Mã nguồn đầy đủ

    package main
    
    import (
    	"bytes"
    	"encoding/json"
    	"fmt"
    	"io/ioutil"
    	"net/http"
    )
    
    type Github interface {
    	listIssues() []Issue
    	createIssue(Issue) Issue
    }
    
    type Issue struct {
    	ID    int    `json:"id, omitempty"`
    	Title string `json:"title"`
    	Body  string `json:"body"`
    }
    
    const (
    	Token = ""
    	URI   = ""
    )
    
    func (issue Issue) createIssue(newIssue Issue) Issue {
    	issueStringify, _ := json.Marshal(newIssue)
    	req, _ := http.NewRequest("POST", URI, bytes.NewBuffer(issueStringify))
    
    	req.Header.Set("Authorization", Token)
    
    	client := &http.Client{}
    
    	resp, _ := client.Do(req)
    
    	// In ra response code
    	fmt.Println("\n> Response Status:", resp.Status)
    
    	// Lấy response trả về
    	body, _ := ioutil.ReadAll(resp.Body)
    
    	// Parse json string từ response trả về
    	var iss Issue
    	json.Unmarshal(body, &iss)
    
    	return iss
    }
    
    func (issue Issue) listIssues() []Issue {
    	req, _ := http.NewRequest("GET", URI, nil)
    
    	req.Header.Set("Authorization", Token)
    
    	client := &http.Client{}
    
    	resp, _ := client.Do(req)
    
    	// In ra response code
    	fmt.Println("\n> Response Status:", resp.Status)
    
    	// Lấy response trả về
    	body, _ := ioutil.ReadAll(resp.Body)
    
    	// Parse json string từ response trả về
    	var issues []Issue
    	json.Unmarshal(body, &issues)
    
    	return issues
    }
    
    func main() {
    	newIssue := Issue{
    		Title: "fix bug 2",
    		Body:  "bug bug bug",
    	}
    	issues := Github(Issue{})
    	fmt.Println(issues.createIssue(newIssue))
    	fmt.Println(issues.listIssues())
    }
    

    Quá đơn giản phải không các bạn 😁



  • @admin thanks ad ạ =D


 

Có thể bạn cũng quan tâm

DMCA.com Protection Status