# Работа с комментариями

С помощью REST API можно получить доступ к комментариям в запросах на вытягивание, проблемах или фиксациях и управлять ими.

Для любого запроса GitHub на вытягивание предоставляет три типа представлений комментариев: [комментарии по запросу на вытягивание](https://github.com/octocat/Spoon-Knife/pull/1176#issuecomment-24114792) в целом, [комментарии к определенной строке](https://github.com/octocat/Spoon-Knife/pull/1176#discussion_r6252889) в запросе на вытягивание и [комментарии по определенной фиксации](https://github.com/octocat/Spoon-Knife/commit/cbc28e7c8caee26febc8c013b0adfb97a4edd96e#commitcomment-4049848) в запросе на вытягивание.

Каждый из этих типов комментариев проходит через другую часть GitHub API.
В этом руководстве мы рассмотрим, как получить доступ к каждому из них и управлять ими. Для каждого примера мы будем использовать [этот пример запроса на вытягивание](https://github.com/octocat/Spoon-Knife/pull/1176) в репозитории octocat. Как всегда, примеры можно найти в [нашем репозитории примеров для платформы](https://github.com/github/platform-samples/tree/master/api/ruby/working-with-comments).

## Комментарий к запросу на вытягивание

Чтобы получить доступ к комментариям к запросу на вытягивание, вы будете использовать [конечные точки для управления проблемами](/ru/enterprise-server@3.22/rest/issues/comments).
На первый взгляд это может показаться нелогичным. Но как только вы понимаете, что запрос на вытягивание является просто проблемой с кодом, рекомендуется использовать эти конечные точки для создания комментариев по запросу на вытягивание.

Мы продемонстрируем получение комментариев к запросу на вытягивание путем создания скрипта Ruby с помощью [Octokit.rb](https://github.com/octokit/octokit.rb). Вы также хотите создать [personal access token](/ru/enterprise-server@3.22/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens).

Следующий код поможет получить доступ к комментариям из запроса на вытягивание с помощью Octokit.rb:

```ruby
require 'octokit'

# !!! DO NOT EVER USE HARD-CODED VALUES IN A REAL APP !!!
# Instead, set and test environment variables, like below
client = Octokit::Client.new :access_token => ENV['MY_PERSONAL_TOKEN']

client.issue_comments("octocat/Spoon-Knife", 1176).each do |comment|
  username = comment[:user][:login]
  post_date = comment[:created_at]
  content = comment[:body]

  puts "#{username} made a comment on #{post_date}. It says:\n'#{content}'\n"
end
```

Здесь мы специально вызываем API, чтобы получить комментарии (), указав имя репозитория (`issue_comments`), и идентификатор запроса на вытягивание, который мы заинтересованы (`octocat/Spoon-Knife``1176`). После этого мы просто проходим по комментариями, чтобы получить информацию о каждом из них.

## Комментарии к строке запроса на вытягивание

В представлении различий можно начать обсуждение определенного аспекта отдельного изменения, внесенного в запрос на вытягивание. Эти комментарии находятся в отдельных строках в измененном файле. URL-адрес конечной точки для этого обсуждения поступает из [конечной точки для управления проверка запроса на вытягивание](/ru/enterprise-server@3.22/rest/pulls/comments).

В следующем коде извлекаются все комментарии к запросу на вытягивание, сделанные для файлов, с учетом номера одного запроса на вытягивание:

```ruby
require 'octokit'

# !!! DO NOT EVER USE HARD-CODED VALUES IN A REAL APP !!!
# Instead, set and test environment variables, like below
client = Octokit::Client.new :access_token => ENV['MY_PERSONAL_TOKEN']

client.pull_request_comments("octocat/Spoon-Knife", 1176).each do |comment|
  username = comment[:user][:login]
  post_date = comment[:created_at]
  content = comment[:body]
  path = comment[:path]
  position = comment[:position]

  puts "#{username} made a comment on #{post_date} for the file called #{path}, on line #{position}. It says:\n'#{content}'\n"
end
```

Вы заметите, что это очень похоже на приведенный выше пример. Различия между этим представлением и комментарием к запросу на вытягивание кроются в направлении беседы.
Комментарий, сделанный в запросе на вытягивание, должен относиться к общему направлению кода. Комментарий, сделанный в рамках проверки запроса на вытягивание, должен касаться реализации конкретного изменения в файле.

## Комментарии к фиксации

Последний тип комментариев относится к отдельным фиксациям. По этой причине они используют конечную точку для управления комментариями[ фиксации](/ru/enterprise-server@3.22/rest/commits#get-a-commit-comment).

Чтобы получить комментарии к фиксации, необходимо использовать SHA1 фиксации.
Другими словами, вы не будете использовать идентификатор, связанный с запросом на вытягивание. Приведем пример:

```ruby
require 'octokit'

# !!! DO NOT EVER USE HARD-CODED VALUES IN A REAL APP !!!
# Instead, set and test environment variables, like below
client = Octokit::Client.new :access_token => ENV['MY_PERSONAL_TOKEN']

client.commit_comments("octocat/Spoon-Knife", "cbc28e7c8caee26febc8c013b0adfb97a4edd96e").each do |comment|
  username = comment[:user][:login]
  post_date = comment[:created_at]
  content = comment[:body]

  puts "#{username} made a comment on #{post_date}. It says:\n'#{content}'\n"
end
```

Обратите внимание, что этот вызов API извлечет комментарии к одной строке, а также комментарии для всей фиксации.

Создание комментариев фиксации можно включить или отключить для репозитория. Владельцы организации могут настроить параметр по умолчанию для репозиториев в своей организации. Дополнительные сведения см. в разделе [Управление коммит-комментариями для вашей организации](/ru/enterprise-server@3.22/organizations/managing-organization-settings/managing-commit-comments-for-your-organization).