При разработке API RESTful используется несколько уровней, и на каждом уровне есть несколько допустимых подходов.
TCPServer действительно очень низкий уровень, так как вам придется самостоятельно реализовывать протокол HTTP, что не рекомендуется.
Одним шагом вверх будет Rack, который позаботится обо всех низкоуровневых деталях HTTP. Это то, что все веб-фреймворки Ruby, такие как Rails, Sinatra или Ramaze, используют под капотом. Это также гарантирует, что ваше приложение работает на различных серверах приложений, таких как Passenger, Thin или Unicorn.
Но даже Rack по-прежнему низкоуровневый, он дает вам HTTP, но высокоуровневые фреймворки отбирают шаблон из типичного веб-программирования. Для API вы могли бы взглянуть на минимальный фреймворк, такой как Sinatra, или фреймворк, специально разработанный для таких API, как Grape или Rails :: API . Они уже предполагают использование API-интерфейса в стиле RESTful, поэтому вы должны найти для них естественное соответствие.
Типичные API-интерфейсы RESTful характеризуются тем, что ресурсы идентифицируются с помощью предположительных (управляемых соглашением) URL-адресов, и операции над ними основаны на HTTP-методах (глаголах), таких как GET, POST, PUT, DELETE и PATCH. Чтобы по-настоящему принять дух REST, как это было описано Роем Филдингом, вы можете перейти к более полному API «Гипермедиа». Наиболее заметное отличие состоит в том, что ответы более самостоятельны. Они имеют четко определенные типы медиа (определяемые вами или существующими спецификациями), содержащие ссылки на связанные ресурсы, а не просто числовые идентификаторы. Точно так же ответы содержат шаблоны / формы, описывающие операции, которые могут быть выполнены. (Это еще не все, но на поверхностном уровне это то, что вы заметите.)
Это делает API более доступным для обнаружения как людьми, так и машинами, и предоставляет большую свободу в развитии API. Может быть недостаток в производительности, поскольку клиенту обычно требуется выполнять больше запросов для достижения того же результата, но это можно предотвратить с помощью хорошо продуманного дизайна и кэширования. Garner специально создан для обеспечения легкого кэширования на стороне сервера.
Вы можете определить свои собственные типы носителей, которые подходят для вашего приложения, обычно поверх JSON или XML, или вы можете взглянуть на существующие спецификации, в частности Collection + JSON , HAL и JSON-API . Кажется, на данный момент HAL имеет наибольшую популярность: несколько библиотек доступны на различных платформах.
По-видимому, вокруг JSON-API происходит не так уж много, но два важных проекта, ActiveModel :: Serializer и Ember-data, оба принимают (и одновременно разрабатывают) этот формат, что означает, что он может стать популярный выбор в мире Ruby / Rails.
Редактировать : опечатка