Нам дали задание, которое с благословения оригинальной безымянной компании было передано моим одноклассникам и мне. Он включает в себя использование API GitHub, чтобы иметь возможность получить доступ к некоторой базовой информации пользователя и обслуживать ее каким-либо удобным способом (на усмотрение нас).

Отлично, я думаю, мне понадобится SPA, встроенный в REACT, который принимает имя пользователя, загружается в API GitHub, а затем отображает результаты в простом компоненте. Возможно, я могу добавить эти объекты ответа на обещание в массив, хранящийся в состоянии, а затем позволить пользователю получить доступ к информации о выборе из списка опций отбрасывания.

Шаг первый, что это за API для GitHub…

https://developer.github.com/v3/
https://developer.github.com/v3/auth/#basic-authentication
https://github.blog/2013-05-16-personal-api-tokens/
https://github.com/settings/tokens/new

Хорошо, давай прочитаем об этом. Хммм, большая часть информации дана как ссылка в командной строке curl, не совсем уверен, что такое curl, поэтому я погуглил, действительно когда-либо использовал только bash / git / heroku / rvm.

https://curl.haxx.se/

инструмент и библиотека командной строки
для передачи данных с помощью URL-адресов.

Это имеет смысл, но я все равно хотел бы использовать javascript и сделать запрос на получение в моем приложении вместо написания инструмента командной строки, так что мне нужно знать об auth и как я могу отправить эти параметры? Документы говорят, что я могу отправить либо заголовок, либо как параметры, но где токен аутентификации? У меня уже есть аккаунт. Документы ссылаются на личные токены аутентификации в моей учетной записи GitHub, поэтому я иду туда, чтобы узнать, могу ли я получить токен.

Чтобы получить личный токен, мне нужно предоставить область для запроса токена и то, что мне нужно. Здесь мне просто понадобится доступ для чтения к запрашиваемой мной информации о пользователе. Как только я получу свой личный токен авторизации, я могу начать делать запросы, следуя документации API.

Токен OAuth2 (отправляется в заголовке)

curl -H 'Авторизация: токен OAUTH-TOKEN' https://api.github.com

Токен OAuth2 (отправляется как параметр)

curl https://api.github.com/?access_token= OAUTH-TOKEN

Хорошо, понял!

fetch('https://api.github.com/users/josh-sea',{
headers:
    {
'Accept': 'application/vnd.github.v3+json',
 Authorization: 'token 'ACTUAL_TOKEN_GOES_HERE'
    }
})
.then(r=>r.json())
.then(r=>console.log(r))

Вот что регистрируется в инструментах chrome dev, где я тестирую свою выборку:

{login: “josh-sea”, id: <id>, node_id: “<node_id>”, avatar_url: “https://avatars2.githubusercontent.com/u/<id>?v=4", gravatar_id: “”, …}
avatar_url: “https://avatars2.githubusercontent.com/u/<id>?v=4"
bio: null
blog: “”
collaborators: 0
company: null
created_at: “2018–07–23T14:28:58Z”
disk_usage: 1642
email: null
events_url: “https://api.github.com/users/josh-sea/events{/privacy}"
followers: 2
followers_url: “https://api.github.com/users/josh-sea/followers"
following: 1
following_url: “https://api.github.com/users/josh-sea/following{/other_user}"
gists_url: “https://api.github.com/users/josh-sea/gists{/gist_id}"
gravatar_id: “”
hireable: true
html_url: “https://github.com/josh-sea"
id: <id>
location: null
login: “josh-sea”
name: null
node_id: “<node_id>”
organizations_url: “https://api.github.com/users/josh-sea/orgs"
owned_private_repos: 0
plan: {name: “free”, space: 976562499, collaborators: 0, private_repos: 10000}
private_gists: 0
public_gists: 0
public_repos: 272
received_events_url: “https://api.github.com/users/josh-sea/received_events"
repos_url: “https://api.github.com/users/josh-sea/repos"
site_admin: false
starred_url: “https://api.github.com/users/josh-sea/starred{/owner}{/repo}"
subscriptions_url: “https://api.github.com/users/josh-sea/subscriptions"
total_private_repos: 5
two_factor_authentication: false
type: “User”
updated_at: “2019–03–04T17:45:17Z”
url: “https://api.github.com/users/josh-sea"__proto__: Object

Проект удался! Я собираюсь опубликовать репо как общедоступное, что отменит мой личный токен, но тогда код будет доступен. Вот несколько действующих снимков экрана или попробуйте свой собственный токен авторизации и не публикуйте его. :)

Код на GitHub: https://github.com/josh-sea/codechallenge-gh-api