Uji REST API dengan keriting

1. Gambaran keseluruhan

Tutorial ini memberikan gambaran ringkas mengenai pengujian REST API menggunakan curl.

curl adalah alat baris perintah untuk memindahkan data dan menyokong sekitar 22 protokol termasuk HTTP. Gabungan ini menjadikannya alat ad-hoc yang sangat baik untuk menguji perkhidmatan REST kami.

2. Pilihan baris arahan

curl menyokong lebih daripada 200 pilihan baris perintah . Dan kita boleh mempunyai sifar atau lebih daripadanya untuk menyertakan URL dalam perintah.

Tetapi sebelum kita menggunakannya untuk tujuan kita, mari kita lihat dua perkara yang akan menjadikan hidup kita lebih mudah.

2.1. Kata Kerja

Semasa kami menguji, adalah baik untuk menetapkan mod verbose pada:

curl -v //www.example.com/

Akibatnya, perintah akan memberikan maklumat yang berguna seperti alamat IP yang diselesaikan, port yang ingin kita sambungkan dan tajuk.

2.2. Pengeluaran

Secara lalai, curl mengeluarkan badan tindak balas kepada output standard. Sebagai pilihan, kami dapat memberikan pilihan output untuk menyimpan ke fail:

curl -o out.json //www.example.com/index.html

Ini sangat berguna apabila ukuran tindak balasnya besar.

3. Kaedah HTTP Dengan Keriting

Setiap permintaan HTTP mengandungi kaedah. Kaedah yang paling biasa digunakan ialah GET, POST, PUT dan DELETE.

3.1. DAPATKAN

Ini adalah kaedah lalai semasa membuat panggilan HTTP dengan curl. Sebenarnya, contoh yang ditunjukkan sebelum ini adalah panggilan GET biasa.

Semasa menjalankan contoh perkhidmatan tempatan di port 8082, kami akan menggunakan perintah seperti ini untuk membuat panggilan GET:

curl -v //localhost:8082/spring-rest/foos/9

Oleh kerana kita mengaktifkan mod verbose, kita akan mendapat lebih banyak maklumat bersama dengan badan respons:

* Trying ::1... * TCP_NODELAY set * Connected to localhost (::1) port 8082 (#0) > GET /spring-rest/foos/9 HTTP/1.1 > Host: localhost:8082 > User-Agent: curl/7.60.0 > Accept: */* >< HTTP/1.1 200 < X-Application-Context: application:8082 < Content-Type: application/json;charset=UTF-8 < Transfer-Encoding: chunked < Date: Sun, 15 Jul 2018 11:55:26 GMT < { "id" : 9, "name" : "TuwJ" }* Connection #0 to host localhost left intact

3.2. POS

Kami menggunakan kaedah ini untuk mengirim data ke perkhidmatan penerima. Dan untuk itu, kami menggunakan pilihan data.

Cara paling mudah untuk melakukan ini adalah memasukkan data dalam arahan:

curl -d 'id=9&name=baeldung' //localhost:8082/spring-rest/foos/new

atau, lulus fail yang berisi badan permintaan ke pilihan data seperti ini:

curl -d @request.json -H "Content-Type: application/json" //localhost:8082/spring-rest/foos/new

Dengan menggunakan perintah di atas sebagaimana adanya, kita mungkin akan mengalami mesej ralat seperti yang berikut:

{ "timestamp" : "15-07-2018 05:57", "status" : 415, "error" : "Unsupported Media Type", "exception" : "org.springframework.web.HttpMediaTypeNotSupportedException", "message" : "Content type 'application/x-www-form-urlencoded;charset=UTF-8' not supported", "path" : "/spring-rest/foos/new" }

Ini kerana curl menambahkan header lalai berikut untuk semua permintaan POST:

Content-Type: application/x-www-form-urlencoded

Inilah juga yang digunakan oleh penyemak imbas dalam POST biasa. Dalam penggunaan kami, kami biasanya ingin menyesuaikan tajuk bergantung pada keperluan kami.

Sebagai contoh, jika perkhidmatan kami menjangkakan jenis kandungan json, maka kami dapat menggunakan pilihan -H untuk mengubah permintaan POST asal kami:

curl -d '{"id":9,"name":"baeldung"}' -H 'Content-Type: application/json' //localhost:8082/spring-rest/foos/new

Perintah arahan Windows tidak mempunyai sokongan untuk tanda kutip tunggal seperti cengkerang seperti Unix.

Hasilnya, kita perlu mengganti petikan tunggal dengan tanda petik berganda; melarikan diri dari mana-mana yang diperlukan:

curl -d "{\"id\":9,\"name\":\"baeldung\"}" -H "Content-Type: application/json" //localhost:8082/spring-rest/foos/new

Selain itu, ketika kita ingin mengirim sejumlah data yang lebih besar, biasanya adalah idea yang baik untuk menggunakan file data.

3.3. LETAK

Kaedah ini sangat serupa dengan POST. Tetapi kami menggunakannya ketika kami ingin menghantar versi baru dari sumber yang ada. Untuk melakukan ini, kami menggunakan pilihan -X.

Tanpa menyebut jenis kaedah permintaan, lengkung secara default untuk menggunakan GET. Oleh itu, kami secara jelas menyebut jenis kaedah sekiranya PUT:

curl -d @request.json -H 'Content-Type: application/json' -X PUT //localhost:8082/spring-rest/foos/9

3.4. HAPUS

Sekali lagi, kami menyatakan bahawa kami ingin menggunakan DELETE dengan menggunakan pilihan -X:

curl -X DELETE //localhost:8082/spring-rest/foos/9

4. Tajuk Tersuai

Kita boleh mengganti header lalai atau menambahkan header kita sendiri.

Sebagai contoh, untuk menukar tajuk Host, kami melakukan ini:

curl -H "Host: com.baeldung" //example.com/

Untuk mematikan header User-Agent, kami memasukkan nilai kosong:

curl -H "User-Agent:" //example.com/

Senario yang paling biasa semasa ujian mengubah tajuk Kandungan dan Terima. Kita hanya perlu awalan setiap tajuk dengan pilihan -H:

curl -d @request.json -H "Content-Type: application/json" -H "Accept: application/json" //localhost:8082/spring-rest/foos/new

5. Pengesahan

Perkhidmatan yang memerlukan pengesahan akan menghantar kembali kod respons HTTP 401 - Tidak Sah dan tajuk WWW-Authenticate yang berkaitan.

Untuk pengesahan asas, kita hanya boleh memasukkan kombinasi nama pengguna dan kata laluan di dalam permintaan kita menggunakan pilihan pengguna :

curl --user baeldung:secretPassword //example.com/

Walau bagaimanapun, jika kami ingin menggunakan OAuth2 untuk pengesahan, pertama kami perlu mendapatkan akses_token dari perkhidmatan kebenaran kami.

Respons perkhidmatan akan mengandungi access_token:

{ "access_token": "b1094abc0-54a4-3eab-7213-877142c33fh3", "token_type": "bearer", "refresh_token": "253begef-868c-5d48-92e8-448c2ec4bd91", "expires_in": 31234 }

Sekarang, kita boleh menggunakan token di tajuk Pengesahan kami:

curl -H "Authorization: Bearer b1094abc0-54a4-3eab-7213-877142c33fh3" //example.com/

6. Kesimpulannya

Kami melihat penggunaan fungsi curl minimum untuk menguji perkhidmatan REST kami. Walaupun ia dapat melakukan lebih banyak daripada apa yang telah dibincangkan di sini, untuk tujuan kita, ini sudah cukup.

Jangan ragu untuk menaip curl -h pada baris perintah untuk melihat semua pilihan yang ada. Perkhidmatan REST yang digunakan untuk demonstrasi terdapat di sini di GitHub.