Каковы лучшие практики для разработки УСПОКОИТЕЛЬНОГО общедоступного API на направляющих?

Измените ExecStop на /bin/kill и укажите PIDFile на файл .pid:

[Unit]
Description=Zookeeper Distributed Coordination Server
Documentation=http://zookeeper.apache.org
After=network.target

[Service]
Type=forking
User=zookeeper
Group=zookeeper
WorkingDirectory=/opt/zookeeper
Environment=ZOO_LOG_DIR=/var/log/zookeeper
ExecStart=/opt/zookeeper/bin/zkServer.sh start
PIDFile=/var/lib/zookeeper/zookeeper_server.pid
ExecStop=/bin/kill $MAINPID
SuccessExitStatus=1 143
Restart=on-failure

[Install]
WantedBy=multi-user.target

Не забудьте изменить SuccessExitStatus на код 1 143.

9
задан thecoshman 23 July 2015 в 10:31
поделиться

1 ответ

Как правило, API для моих приложений действительно основаны на тех же ресурсах, которые составляют интерфейс HTML. Для некоторых (не меня), который мог бы просто использовать код, который выходит из генератора лесов — но независимо от того, пишу ли я это пользовательский или позволяю генератору обработать его, существует очень немного экземпляров, где я выставляю ресурсы только программному API и не конечному пользователю просматриваю.

Управление версиями не было проблемой для приложений, которые я создал до сих пор, но я могу думать о двух способах реализовать его.

1) Вы могли добавить маршруты с префиксом 'v1', 'v2', и т.д., которые устанавливают параметр, к которому можно затем получить доступ в контроллере для определения обработки для появления:

в routes.rb:

map.resources :posts, :path_prefix => '/:version'

в posts_controller.rb

class PostsController < ApplicationController
  def index
    respond_to do |format|
      format.xml do
        if params[:version] == 'v1'
          # ...
        else
          # ...
        end
      end
    end
  end
end

2) Вы могли бы также рассмотреть добавление пользовательского формата ответа для каждой версии

в initializers/mime_types.rb

Mime::Type.register_alias "application/xml", :v1
Mime::Type.register_alias "application/xml", :v2

в posts_controller.rb

class PostsController < ApplicationController
  def index
    respond_to do |format|
      format.v1 do
        # ...
      end
      format.v2 do
        # ...
      end
    end
  end
end

Первый дал бы Вам URL как example.com/v1/posts.xml и example.com/v2/posts.xml; последний дал бы Вам URL как example.com/posts.v1 и example.com/posts.v2

11
ответ дан 4 December 2019 в 20:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: