Skip to content

Instantly share code, notes, and snippets.

@dsalahutdinov

dsalahutdinov/README.md Secret

Last active Feb 12, 2021
Embed
What would you like to do?
Amplifr Backend Q

Представьте, ваш проект завязан на внешние API соцсетей, через которую осуществляется постинг контента.

class API::Facebook
  def post_photo(img)
    api('feed/photos', { image_url: img.publish_url, caption: img.caption })
  end
  
  def post_video(video)
    api('feed/videos', { url: video.publish_url, caption: video.caption, cover: video.cover })
  end
  
  private
  
  def api(path, params)
    ...
  rescue e
    context = Context.new(path, params)
    rescue_api_error(e, context)
  end
  
  def rescue_api_error(e, context)
    ...
  end
end

class API::Vkontakte
end

Q1

Запросы в API соцсетей не всегда заканчиваются успешно по ряду причин, вот некоторые из них:

  1. У пользователя забрали права на публикацию в группу соцсети
  2. Переданы не валиные данные, например, длинный текст или изображение недопустимо большого разрешения/размера
  3. Соцсеть сочла контент не приемлемым, например, ссылка в тексте поста заблокирована
  4. Сервер отвечает специфической ошибкой из документации
  5. Сервер отвечает не документированной ошибкой
  6. Сервер отвечает в невалидном формате: ожидаем JSON, а ответ приходит HTML
  7. Сервер не соблюдает конвенции HTTP, к примеру, возвращает 500 ответ, но при этом публикация в соцсети проходит.
  8. Сервер недоступен, либо соединение прерывается по таймауту
  9. В вашем датацентре отключился интернет

Обработка ошибок происходит в методе resque_error. Опишите, идейно (можно на псевдокоде), как вы реализуете метод обработки ошибок и что должно происходить в каждом варианте. Как бы вы тестировали такой код обработки ошибок. Если идей несколько - распишите их плюсы и минусы.

Q2

При переходе на новую версию АПИ, старые шаблоны ответов могут стать неактуальными, например, добавляются более детальные виды ошибок, замещающие предыдущие. Код методаresque_error со временем теряет актуальность. В реальности не всегда получается прочитать всю документацию по новой версии API и актуализировать код. Более того, из первого задания известно, что документация не всегда соответствует действительности.

Распишите идеи и подходы, которые позволят содержать код в "актуальном" состоянии, их плюсы и минусы (если несколько).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment