Rest APIs в Go — использование net/http вместо библиотеки, такой как Gorilla

Я вижу, что у самого Go есть пакет net/http, который достаточен для предоставления всего, что вам нужно для запуска и работы ваших собственных REST API. Однако существует множество фреймворков; самый популярный, может быть, скажем gorilla.

Учитывая, что одной из основных вещей, которые мне нужно сделать в будущем, является создание API-интерфейсов REST, которые будут получать доступ к некоторому внутреннему хранилищу (базам данных, кешам и т. д.) для выполнения операции CRUD, хорошо ли использовать саму стандартную библиотеку Go, или я должен рассмотреть возможность использования некоторых фреймворков?

Обычно люди пишут новую библиотеку или фреймворк, которые решают проблему, присутствующую в существующей библиотеке. Но многие фреймворки также имеют тенденцию усугублять ситуацию, когда фактические требования просты.

Итак, у меня есть несколько вопросов:

  1. Достаточно ли хороша базовая библиотека в go lang, чтобы поддерживать базовые и умеренные функции для REST?

  2. Если я в конечном итоге буду использовать встроенную библиотеку, а завтра мне придется изменить ее, чтобы использовать какой-либо фреймворк (например, гориллу), насколько это будет сложно/дорого?

  3. Действительно ли фреймворки решают проблемы или просто усложняют простые проблемы?

Я был бы очень признателен, если бы кто-то поделился здесь своими мыслями (кто сам сделал этот выбор), пока я исследую больше своих собственных.


person Ankur Garg    schedule 08.07.2016    source источник
comment
Какие конкретные варианты использования вы имеете в виду?   -  person    schedule 08.07.2016
comment
На данный момент это простые вызовы Get (мой API извлекает данные из некоторого внутреннего хранилища), это может быть база данных (Sql или без Sql) или кеш, или и то, и другое. В дальнейшем это могут быть и все операции CRUD. При этом есть и другие вещи (аккуратная обработка ошибок и т. д.).   -  person Ankur Garg    schedule 08.07.2016


Ответы (2)


Встроенного пакета net/http достаточно для создания полного REST API. Однако некоторые библиотеки могут немного упростить создание API, особенно если REST API сложный. Переход от встроенных средств к любому приличному фреймворку относительно прост — они обычно принимают обработчики типа http.Handler.

В конце концов, это крайне ситуативный выбор. Лучшее, что вы можете сделать, — изучить каждое доступное решение, сопоставить и сравнить его, а затем, если возможно, построить доказательство концепции с лучшими вариантами. Опыт из первых рук поможет вам лучше всего.

person Adrian    schedule 09.07.2016
comment
Спасибо за ответ Адриан. Да, я согласен, и я хочу сделать Proof Of Concept, чтобы узнать больше вещей из первых рук. Но POC мало что может сделать (все, что я могу сделать, это простой API для отдыха, который, как я полагаю, прост и может не отвечать тому, что я здесь ищу). Поэтому я подумал о том, чтобы задать его на более широком форуме разработчикам, которые потратили некоторое время на создание вещей с помощью Go. Ваш ответ проливает свет и дает мне больше ясности. - person Ankur Garg; 09.07.2016

  1. Пакета net/http, вероятно, достаточно для большинства сценариев, но если вы хотите упростить разработку, вам следует использовать сторонний пакет, например Gorilla. Например, ServeMux из net/http отлично справляется с маршрутизацией входящих запросов для фиксированных URL-адресов, но для красивых путей, использующих переменные, вам нужно будет реализовать собственный мультиплексор при использовании Gorilla, вы получаете это бесплатно.

    Другой пример: если вы хотите указать ресурсы RESTful с правильными методами HTTP, сложно работать со стандартным http.ServeMux, в то время как с пакетом mux Gorilla запросы могут сопоставляться на основе хоста URL, пути, префикса пути, схем, заголовка и запроса. значения и методы HTTP.

  2. Одним из больших преимуществ Gorilla является то, что он полностью совместим с пакетом net/http и может быть заменен в будущем.

  3. См. 1.

Я настоятельно рекомендую вам использовать инструментарий Gorilla для разработки сервисов REST.

person Shmulik Klein    schedule 09.07.2016
comment
Большое спасибо, Шмулик, это был именно тот ответ, который я искал здесь. - person Ankur Garg; 09.07.2016
comment
Имейте в виду, что горилла — не единственный вариант — я использовал httprouter, который немного легче, и у меня был хороший успех с ним. У него не так много функций, он находится где-то между встроенным пакетом и гориллой с точки зрения возможностей. - person Adrian; 09.07.2016