본문에는 86개의 반응과 11개의 평론이 있다

8246 단어 metagotutorialshowdev
톰 스콧(TomScott)은 최근 동영상 제목에 동영상의 조회수를 포함하는 동영상을 만들었다.이 제목은 유튜브 API를 호출하는 프로그램으로 조회량에 따라 최신을 유지합니다.이것은 아주 좋은 영상이다.
어쨌든, 나는 이 생각을 정말 좋아하고, 이 dev.to 문장에서 한번 시도해 보고 싶다.이 글은 두 가지 측면에서 톰의 동영상과 다르다. 글의 제목은 관점이 아니라 대량의 반응과 평론을 포함하고 있다.두 번째는 주제입니다.Tom은 API의 발명에 대해 이야기했다.API를 사용하여 dev.to 서비스를 호출하는 방법에 대해 이야기하고 싶습니다.
글의 제목은 평론과 반응의 수량과 완전히 일치하지 않습니다. 제목을 업데이트하는 프로그램은 분당 한 번만 실행되기 때문입니다.그 밖에 dev.toapi가 최종적으로 일치한다고 의심합니다. 이것은 반응과 평론의 수량이 어느 때에 업데이트될 것이지만 실시간으로 발생하지 않을 것입니다.만약에 글을 읽을 때 제목이 반응이나 평론의 수량과 일치하거나 가깝다면 코드가 여전히 실행되고 있음을 나타낸다.하지만 언제든지 일을 멈출 수 있다.내가 사용하고 있는 것은 테스트판이다. 미래에 바뀌거나 해고될 수도 있다.
본고의 나머지 부분에서, 나는 dev.toapi를 사용하는 절차를 토론할 것이다.

OpenAPI 사양


서비스와 상호작용하는 프로그램을 구축하는 첫 번째 단계는api를 발견하는 것이다.
OpenAPI 규범은 개발자와 기계가 서비스의 기능을 발견하고 이해할 수 있도록 하는 표준을 정의했다.그것은 서류와 계약으로 쓰인다.
OpenApi 문서를 통해 정의된 API는 기계적으로 우호적이다. 이것은 우리가 프로그램을 구축하여 이 문서를 설명하고 이를 사용하여 유용한 일을 할 수 있다는 것을 의미한다.예를 들어 oapi-codegen 문서를 읽고 golang http 클라이언트를 생성하여api와 상호작용할 수 있다.테스트 시작 프로그램이나 시뮬레이션 프로그램으로 사용할 수 있는 메모리 서비스도 생성할 수 있다.
OpenAPI의 또 다른 장점은 인간에게도 우호적이라는 것이다.그것은 문서로 서버에 위탁 관리하고 브라우저를 통해 조회할 수 있다.이것이 바로 dev.to가 사용하는 것입니다. 누구나 OpenApi 규범을 읽고 다운로드할 수 있습니다.

AuthN 및 AuthZ


프로그램을 구축하는 두 번째 단계는 유효한 증거를 얻는 것이다.
서비스는 당신이 누군지 아는 방식이 필요합니다.일단 그들이 이 점을 확정하면, 그들은 당신이 실행하고자 하는 조작 (인권) 을 실행할 수 있는지 검증해야 할 수도 있습니다.
dev.to의 경우api 키는 authN과 authZ에 사용됩니다.api 키는 계정과 연결된 위조 랜덤 서비스로 생성된 문자열입니다.dev.To 에 대한 가져오기
  • 액세스
  • "API 키 개발"부분에서 설명을 추가하고 "API 키 생성"
  • 을 클릭하여 새 키를 만듭니다.

    클라이언트 생성


    일단 OpenAPI 문서와api 키가 생기면 충분히 활용할 수 있습니다.
    나는 oapi-codegen 도구를 사용하여 golang 클라이언트를 생성하여api와 상호작용을 한다.과정이 매우 빠르다.dev.to의 OpenAPI 문서를 다운로드하고 oapicodegen을 실행했습니다. 오류나 경고가 없습니다.때때로 문서나 코드 생성기를 조정하여 작업을 해야 하지만, 이 예에서는 그렇지 않습니다.결과는 다음과 같은 방법으로 golang 구조를 생성했다.

    클라이언트 사용


    클라이언트를 생성하면 다음과 같은 코드만 작성할 수 있습니다.
  • 검색 글의 반응과 평론수
  • 반응 또는 의견 수가 변경되면 제목 업데이트
  • 두 번째 단계는 첫 번째 단계보다 더 많은 일을 필요로 한다.
    dev.to에서 작성할 때front matter를 사용했기 때문에 제목 업데이트는 가격 인하 중인 제목 필드를 업데이트하는 것을 의미합니다.
    ---
    title:This article has x reactions and y comments
    published: true
    description: ...
    tags: ...
    ---
    
    이 계획의 요점은 다음과 같다.
    func run(ctx context.Context, env *programEnv, client *ClientWithResponses) {
        r, e := getArticleActivity(ctx, client, env.ArticleID)
        if e != nil {
            log.Fatal(e)
        }
        log.Debugf("Article reactions: %[1]d - Article comments: %[2]d",
            r.ReactionsCount,
            r.CommentsCount)
    
        newTitle := generateNewTitle(r.ReactionsCount, r.CommentsCount)
        fmEditor, e := newFrontMatterEditor(r.BodyMarkdown)
        if e != nil {
            log.Fatal(e)
        }
        if fmEditor.title == newTitle {
            log.Debug("Article title is already up to date with the number of reactions and comments")
            return
        }
    
        log.Debug("Updating the title of the article")
        fmEditor.updateTitle(newTitle)
        e = saveArticle(ctx, client, env.ArticleID, fmEditor.markdown)
        if e != nil {
            log.Fatal(e)
        }
        log.Info("Article with the new title has been saved")
    }
    
    나머지 소스 코드는 github 에서 찾을 수 있습니다.

    이윤


    마지막으로, 나는 분당 한 번씩 프로그램을 실행하는 cron 작업을 만들었다.
    SHELL=/bin/bash
    * * * * * /home/napicella/wrapper.sh
    
    그중에 포장기.sh는 bash 스크립트입니다. 프로그램을 호출합니다.
    #!/bin/bash
    
    source .env
    ./update-article >> /home/napicella/ua.log 2>&1 
    
    Dev.to 문서에서api의 서비스 할당량을 언급하지 않았습니다.지금까지 나는 제한을 받지 않았기 때문에 이것은 합리적인 서비스 가격이라고 생각한다.

    결론


    마지막으로 나는 톰 스콧의 생각에 감사할 것이다.아직 보지 못했다면, 이것은 가리키는 링크입니다.
    나를 따라와, 너의 구독원에서 새로운 댓글을 받아라.
    표지 사진 대부 GraphicMama-team

    좋은 웹페이지 즐겨찾기