Нам дали задание, которое с благословения оригинальной безымянной компании было передано моим одноклассникам и мне. Он включает в себя использование 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 (отправляется как параметр)
Хорошо, понял!
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