Faraday: Удаляет телами

Созданный на 17 мая 2017  ·  23Комментарии  ·  Источник: lostisland/faraday

Спецификация HTTP изменилась в 2014 году и позволяет удалять тела. Есть ли план разрешить ваш метод делегатора в connection.rb, чтобы разрешить тело с методом удаления, а не обнулить его?

Самый полезный комментарий

Для тех, кто все еще ждет этого, я нашел следующий обходной путь, который, похоже, работает в моем случае:

conn = Faraday.new
body = {
some_key: 'some value'
}
conn.run_request(:delete, url, body, headers)

Я надеюсь, что это поможет кому-то, пока удаление не перестанет обнулять тело по умолчанию

Все 23 Комментарий

Вскоре будет отправлен PR для вашего обзора.

Привет @ Carlbc18!

не могли бы вы дать ссылку на вышеупомянутые изменения?
Я думаю, это верно только для спецификаций HTTP 2.0, поэтому нам, возможно, придется внимательно рассмотреть эту функцию.

https://tools.ietf.org/html/rfc7231#section -4.3.5

К вашему сведению: этот же блок текста применим и к запросам GET && HEAD.

конкретно эта часть спецификации:

Полезная нагрузка в сообщении запроса DELETE не имеет определенной семантики;
отправка тела полезной нагрузки в запросе DELETE может вызвать некоторые существующие
реализации, чтобы отклонить запрос.

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

Я думаю, это верно только для спецификаций HTTP 2.0, поэтому нам, возможно, придется внимательно рассмотреть эту функцию.

это фактически часть HTTP 1.1

Я обязательно рассмотрю его, если вы хотите создать пиар.
Вы можете сделать это так же, как и с любым другим репо, просто разветвите faraday и примените изменения к своей вилке, а затем создайте PR для нашей главной ветки.

Спасибо @iMacTia. Я поставлю это. Каковы ваши взгляды на изменение версии, наконец, с этим основным номером версии? Это изменение может стать критическим для многих. Я хотел бы следовать шаблону semver, и на данный момент версия faraday должна быть 1.0.0. Дайте мне знать, что вы думаете.

Мы определенно пытаемся придерживаться семвера, и у нас запланирована версия 1.0 с некоторыми критическими изменениями.
Если это изменение нарушит обратную совместимость, оно будет выпущено только в версии 1.0 (которая в настоящее время не имеет фиксированной даты выпуска).
Однако, насколько я понимаю, теперь вы должны иметь возможность ДОБАВИТЕЛЬНО добавлять тело в запросы GET, HEAD и DELETE, так что разве это не должно быть обратно совместимо? Я что-то упускаю?

@iMacTia i имеет версию 0.13.0, и PR повышен. Мы можем передать любой другой разговор по этому поводу в PR, поскольку я уверен, что будут комментарии. Спасибо еще раз!

Это продолжение моего https://github.com/lostisland/faraday/pull/695#issuecomment -305145499.
Прежде всего, мы должны решить, КАК мы хотим, чтобы это работало.
Предполагая, что изменения должны быть обратно совместимы, приведенное ниже должно работать:

conn = Faraday.new(...)
conn.get('/path', {page: 1, per: 10})

# performs "GET /path?page=1&per=10"

Вариант 1, как указано в моем комментарии, должен сделать это поведение настраиваемым:

conn = Faraday.new(..., standard: :http1_1)
conn.get('/path', {page: 1, per: 10})

# performs "GET /path" with body "page=1&per=10" (assuming www_form_url_encoded request)

Вариант 2 вместо этого означал бы что-то более мощное:

conn = Faraday.new(...) # note no special config here
conn.get('/path', {page: 1, per: 10}, body: {some_key: 'some_value')

# performs "GET /path?page=1&per=10" with body "some_key=some_value"

Однако есть проблема: вариант 2 может работать только с ruby> = 2, поскольку ruby ​​1.9 не поддерживает параметры ключевых слов 😞

Я думаю, что в отношении того, что это не работает на Ruby 1.9, я чувствую, что это нормально. Ruby 1.9 много лет. Я бы рекомендовал увеличить версию как минимум до 2.0 для минимальной версии Ruby, которая будет встроена в версию Faraday v1.0. Также, на мой взгляд, вариант 2 более точно соответствует спецификации http 1.1, так как у вас будет возможность передавать parms и / или необязательное тело.

Мне кажется, что попытка сохранить обратную совместимость с функцией спецификации http, которая действительно работает с Ruby 1.9, вызовет проблемы. Думаю, эта функция больше подошла бы для V1 Фарадея. Мне кажется, что для поддержки этого изменения требуется слишком много переменных (ruby v, передача параметров). Может, я слишком много думаю ...

Я думаю, что в отношении того, что это не работает на Ruby 1.9, я чувствую, что это нормально. Ruby 1.9 много лет. Я бы рекомендовал увеличить версию как минимум до 2.0 для минимальной версии Ruby, которая будет встроена в версию Faraday v1.0. Также, на мой взгляд, вариант 2 более точно соответствует спецификации http 1.1, так как у вас будет возможность передавать parms и / или необязательное тело.

Я полностью согласен со всем вышеизложенным. Это действительно лучший способ действий, хотя это означает, что нам все равно придется ждать версии 1.0.

Итак, чтобы определить API с обратной совместимостью v1.0, мы могли бы попробовать следующее:

ПОЛУЧИТЬ, НАЧАТЬ, УДАЛИТЬ ЗАПРОСЫ

conn = Faraday.new(...) # note no special config here
conn.get(path, url_params, body: {...})
# second parameter is URL PARAMS, optionally accept a named parameter for request body
# works the same for head and delete

ЗАПРОСЫ POST, PUT, PATCH

conn = Faraday.new(...) # note no special config here
conn.post(path, body, url_params: {...})
# second parameter is REQUEST BODY, optionally accept a named parameter for url_params
# works the same for put and patch

Думаю, таким образом мы охватываем все возможные комбинации и расширяем запросы post / put / patch!

Однозначно согласен. Хотим ли мы отказаться от моего пиара и открыть для этого новый? Есть ли отрезок ветки V1, над которым мы можем работать?

С удовольствием закрою его и начну с нуля, так как он будет совершенно другим. Простите за это!

Я создам ветку V1 перед слиянием, так что не стесняйтесь начинать с мастера, и я перенаправлю PR :)

Привет @ Carlbc18 просто хотел сообщить вам, что ветка 1.0 теперь доступна для вас 😃.

Спасибо Спасибо! 😀

Для тех, кто все еще ждет этого, я нашел следующий обходной путь, который, похоже, работает в моем случае:

conn = Faraday.new
body = {
some_key: 'some value'
}
conn.run_request(:delete, url, body, headers)

Я надеюсь, что это поможет кому-то, пока удаление не перестанет обнулять тело по умолчанию

Есть ли какие-нибудь обновления о том, когда это будет доступно?

Я пока не видел PR, но работа над v1 медленно продвигается.
Я мог бы поработать над этим сам, но пока не могу дать оценку.
Обновленный API о том, как должны работать запросы, объясняется в моем комментарии выше, поэтому, если кто-то хочет попробовать его до меня, очень приветствуется PR.

Для полностью обратно совместимого решения PR может быть отделен от мастера, и я могу сделать еще один выпуск 0.x.
Если это изменение нарушит обратную совместимость, лучше выйти из ветви 1.0

https://github.com/lostisland/faraday/pull/855 - черновик PR в поддержку этого.

Я отвергаю эту функцию. Вы можете использовать блочную форму в Faraday, чтобы сделать запрос с телом:

conn.delete(url) do |req|
  req.body = { some_key: 'some value' }
end

Эта идея сделала бы простые удаления с телами одним лайнером, но реализация добавляет больше сложности и удивительного поведения, чем мне хотелось бы. Эта блочная форма уже отлично работает у Фарадея. Я предпочитаю изменять свойства класса добавлению дополнительных аргументов в метод:

conn.delete('/foo/1') do |req|
  req.headers["X-Men"] = "marvel"
  req.params[:confirm] = 1
  req.body = { some_key: 'some value' }
end
Была ли эта страница полезной?
0 / 5 - 0 рейтинги