Спецификация HTTP изменилась в 2014 году и позволяет удалять тела. Есть ли план разрешить ваш метод делегатора в connection.rb, чтобы разрешить тело с методом удаления, а не обнулить его?
Вскоре будет отправлен 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
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
Самый полезный комментарий
Для тех, кто все еще ждет этого, я нашел следующий обходной путь, который, похоже, работает в моем случае:
Я надеюсь, что это поможет кому-то, пока удаление не перестанет обнулять тело по умолчанию