Faraday: Hapus dengan badan

Dibuat pada 17 Mei 2017  ·  23Komentar  ·  Sumber: lostisland/faraday

Spesifikasi HTTP telah berubah pada tahun 2014 dan memungkinkan penghapusan memiliki badan. Apakah ada rencana untuk menyelesaikan metode delegasi Anda di connection.rb untuk mengizinkan badan dengan metode hapus dan tidak menghapusnya?

feature

Komentar yang paling membantu

Bagi siapa pun yang masih menunggu ini, saya menemukan solusi berikut yang tampaknya berhasil dalam kasus saya:

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

Saya harap ini membantu seseorang sampai menghapus tidak lagi nil tubuh secara default

Semua 23 komentar

PR akan segera tersedia untuk Anda tinjau.

Hai @Carlbc18 ,

dapatkah Anda memberikan tautan ke perubahan di atas?
Saya rasa itu hanya berlaku untuk spesifikasi HTTP 2.0, jadi kami mungkin perlu mempertimbangkan fitur ini dengan hati-hati.

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

FYI: Blok teks yang sama ini juga berlaku untuk permintaan GET && HEAD.

khususnya bagian dari spesifikasi ini:

Payload dalam pesan permintaan DELETE tidak memiliki semantik yang ditentukan;
mengirim badan muatan pada permintaan DELETE dapat menyebabkan beberapa yang ada
implementasi untuk menolak permintaan.

saya memiliki perubahan kode dengan tes yang berfungsi (tidak yakin apakah Anda menginginkannya). bagaimana cara membuat pr untuk proyek ini?

Saya rasa itu hanya berlaku untuk spesifikasi HTTP 2.0, jadi kami mungkin perlu mempertimbangkan fitur ini dengan hati-hati.

ini sebenarnya adalah bagian dari HTTP 1.1

Saya pasti akan mempertimbangkannya jika Anda ingin membuat PR.
Anda dapat melakukannya seperti repo lainnya, cukup fork faraday dan terapkan perubahan pada fork Anda, lalu buat PR ke cabang master kami.

Terima kasih @iMacTia. Aku akan memasangnya. Apa pandangan Anda tentang mengubah versi akhirnya memiliki nomor versi utama dengan ini? Perubahan ini bisa menghancurkan bagi banyak orang. Saya ingin mengikuti pola semver, dan versi faraday menjadi 1.0.0 saat ini. Beri tau aku isi pikiranmu.

Kami pasti mencoba untuk tetap berpegang pada semver dan kami telah menjadwalkan v1.0 dengan beberapa perubahan yang melanggar.
Jika perubahan ini akan merusak kompatibilitas ke belakang, maka itu akan dirilis hanya dalam versi 1.0 (yang saat ini tidak memiliki tanggal rilis tetap).
Namun, pemahaman saya adalah bahwa Anda sekarang harus dapat secara OPSIONAL menambahkan badan ke permintaan GET, HEAD, dan DELETE, jadi bukankah itu harus kompatibel ke belakang? Apakah saya melewatkan sesuatu?

@iMacTia saya membuat versi ke 0.13.0 dan PR sudah habis. Kita bisa membawa percakapan lain seputar ini ke PR karena saya yakin akan ada komentar. Terima kasih lagi!

Ini adalah tindak lanjut dari https://github.com/lostisland/faraday/pull/695#issuecomment -305145499 saya.
Pertama-tama kita harus memutuskan BAGAIMANA kita ingin ini bekerja.
Dengan asumsi perubahan harus kompatibel ke belakang, di bawah ini masih berfungsi:

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

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

Opsi 1 sebagaimana dinyatakan dalam komentar saya adalah membuat perilaku ini dapat dikonfigurasi:

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)

Opsi 2 sebaliknya akan berarti sesuatu yang lebih kuat:

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"

Namun ada masalah, opsi 2 mungkin hanya berfungsi dengan ruby ​​>= 2 karena ruby ​​1.9 tidak mendukung params kata kunci

Saya pikir dalam hal ini tidak berfungsi pada Ruby 1.9, saya merasa tidak apa-apa. Ruby 1.9 berumur bertahun-tahun. Saya menyarankan versi kami menabrak setidaknya 2.0 untuk versi Ruby minimum, yang akan sejalan dengan rilis Faraday v1.0. Juga opsi 2 lebih dekat mengikuti spesifikasi http 1.1 menurut saya karena Anda memiliki opsi untuk melewati parms dan atau badan opsional.

Saya merasa mencoba mempertahankan kompatibilitas mundur dengan fitur spesifikasi http yang berfungsi dengan Ruby 1.9 akan menyebabkan masalah. Saya pikir fitur ini akan lebih cocok untuk V1 Faraday. Saya merasa ada terlalu banyak variabel yang perlu didukung untuk perubahan ini (Ruby v, lewat params). Mungkin aku terlalu berlebihan....

Saya pikir dalam hal ini tidak berfungsi pada Ruby 1.9, saya merasa tidak apa-apa. Ruby 1.9 berumur bertahun-tahun. Saya menyarankan versi kami menabrak setidaknya 2.0 untuk versi Ruby minimum, yang akan sejalan dengan rilis Faraday v1.0. Juga opsi 2 lebih dekat mengikuti spesifikasi http 1.1 menurut saya karena Anda memiliki opsi untuk melewati parms dan atau badan opsional.

Saya sangat setuju dengan al di atas. Itu memang tindakan terbaik, meskipun ini berarti kita masih harus menunggu v1.0

Jadi untuk mendefinisikan API yang kompatibel dengan versi sebelumnya v1.0, kita dapat mencoba hal berikut:

DAPATKAN, KEPALA, HAPUS PERMINTAAN

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

POSTING, PUT, PERMINTAAN 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

Saya pikir dengan cara ini kami mencakup setiap kemungkinan kombinasi dan memperluas permintaan post/put/patch juga!

Pasti setuju. Apakah kami ingin menolak PR saya dan membuka PR baru untuk ini? Apakah ada potongan cabang V1 yang bisa kami kerjakan?

Senang untuk menutup yang itu dan mulai dari awal karena akan sangat berbeda. Maaf untuk itu!

Saya akan membuat cabang V1 sebelum bergabung jadi silakan mulai dari master dan saya akan mengarahkan PR :)

Hai @Carlbc18 hanya ingin memberi tahu Anda bahwa cabang 1.0 sekarang tersedia untuk Anda .

Terima kasih terima kasih! 😀

Bagi siapa pun yang masih menunggu ini, saya menemukan solusi berikut yang tampaknya berhasil dalam kasus saya:

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

Saya harap ini membantu seseorang sampai menghapus tidak lagi nil tubuh secara default

Jadi apakah ada pembaruan kapan ini akan tersedia?

Saya belum melihat PR apa pun, tetapi pekerjaan di v1 perlahan-lahan berkembang.
Saya mungkin dapat mengerjakan ini sendiri tetapi saya tidak dapat memberikan perkiraan saat ini.
API yang diperbarui tentang cara kerja permintaan dijelaskan pada komentar saya di atas, jadi jika ada yang ingin mencobanya sebelum saya, PR sangat diterima.

Untuk solusi yang sepenuhnya kompatibel, PR dapat bercabang dari master, dan saya dapat membuat rilis 0.x lainnya.
Jika perubahan akan merusak kompatibilitas ke belakang maka lebih baik keluar dari cabang 1.0

https://github.com/lostisland/faraday/pull/855 adalah rancangan PR untuk mendukung ini.

Saya menolak fitur ini. Anda dapat menggunakan formulir blok di Faraday untuk membuat permintaan dengan badan:

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

Ide ini akan membuat penghapusan sederhana dengan badan satu liner tunggal, tetapi implementasinya menambah lebih banyak kompleksitas dan perilaku mengejutkan daripada yang saya inginkan. Bentuk blok ini sudah berfungsi dengan baik di Faraday. Saya lebih suka memodifikasi properti di kelas daripada menambahkan lebih banyak argumen ke metode:

conn.delete('/foo/1') do |req|
  req.headers["X-Men"] = "marvel"
  req.params[:confirm] = 1
  req.body = { some_key: 'some value' }
end
Apakah halaman ini membantu?
0 / 5 - 0 peringkat

Masalah terkait

JasonBarnabe picture JasonBarnabe  ·  4Komentar

Lewiscowles1986 picture Lewiscowles1986  ·  4Komentar

aleksb86 picture aleksb86  ·  3Komentar

amrrbakry picture amrrbakry  ·  4Komentar

ioquatix picture ioquatix  ·  4Komentar