MongoDB
 sql >> Teknologi Basis Data >  >> NoSQL >> MongoDB

Membangun REST API Menggunakan EVE

Python adalah salah satu bahasa pemrograman yang paling mudah dibaca dan ditulis sepanjang masa. Selama bertahun-tahun, popularitas Python semakin meningkat, dan secara luas digunakan dalam pengembangan aplikasi web, pembuatan skrip, pembuatan game, komputasi ilmiah, dll.

Flask adalah framework aplikasi web Python yang mendapatkan popularitas karena kemudahan penggunaannya untuk pemula Python. Dalam tutorial ini, kita akan melihat EVE, kerangka kerja pembangunan REST API berdasarkan Flask, MongoDB dan Redis. Dari dokumen resmi:

Diberdayakan oleh Flask, MongoDB, Redis, dan niat baik Eve memungkinkan untuk dengan mudah membangun dan menerapkan Layanan Web RESTful yang sangat dapat disesuaikan dan berfitur lengkap.

Yang Akan Kami Buat

Dalam tutorial ini, kita akan melihat cara membuat REST API menggunakan framework EVE. Selanjutnya, menggunakan AngularJS kami akan mendesain ujung depan untuk aplikasi sederhana dan membuatnya berfungsi dengan menggunakan REST API yang dibuat menggunakan EVE. Dalam tutorial ini, kami akan menerapkan fungsi berikut:

  • Buat API Pengguna
  • Validasi API Pengguna
  • Tambahkan API Item
  • Hapus API Item
  • Memperbarui API Item

Memulai

Pemasangan

Kami akan menggunakan pip untuk menginstal EVE.

pip install eve

Kami akan menggunakan MongoDB sebagai basis data. Lihat dokumen resmi untuk pemasangan sesuai sistem Anda.

Membuat API Dasar

Buat folder proyek bernama PythonAPI . Navigasikan ke PythonAPI dan buat file bernama api.py . Di dalam api.py impor EVE dan buat objek EVE.

from eve import Eve
app = Eve()

Selanjutnya, jalankan app saat program dijalankan sebagai program utama.

from eve import Eve
app = Eve()

if __name__ == '__main__':
    app.run()

Jalankan MongoDB menggunakan perintah berikut:

mongod --dbpath= <PATH-TO> /data/db/

Seperti yang Anda lihat, kita perlu menentukan jalur untuk file db. Cukup buat data/db di sistem file Anda dan jalankan perintah di atas.

Bersama dengan instance MongoDB berjalan, EVE memerlukan file konfigurasi dengan info tentang sumber daya API. Jadi di PythonAPI folder buat file lain bernama settings.py dan tambahkan kode berikut:

DOMAIN = {'user': {}}

Kode di atas menginformasikan EVE bahwa sumber daya untuk user tersedia.

Simpan semua file dan jalankan api.py :

python api.py

API harus online seperti yang ditunjukkan:

Kami akan menggunakan Postman REST Client untuk mengirim permintaan ke API. Ini gratis dan dapat diinstal dengan satu klik sederhana. Setelah selesai menginstal, luncurkan aplikasi dan masukkan URL API (http://127.0.0.1:5000/) dan klik kirim. Anda harus memiliki respons seperti yang ditunjukkan:

Karena kami belum memanggil sumber daya API tertentu, itu akan menampilkan semua sumber daya yang tersedia. Sekarang, coba panggil user sumber daya dan Anda harus memiliki respons khusus untuk user .

Membuat dan Memvalidasi API Pengguna

Buat API Pengguna

Kita akan mulai dengan membangun API untuk membuat atau mendaftarkan pengguna untuk aplikasi kita. Pengguna akan memiliki bidang tertentu seperti First Name , Last Name , Username , Password dan Phone Number .

Jadi pertama-tama kita perlu mendefinisikan skema untuk pengguna. Skema mendefinisikan bidang dan tipe data dari bidang utama. Buka settings.py dan ubah DOMAIN dengan mendefinisikan skema seperti yang ditunjukkan :

DOMAIN = {
    'user': {
        'schema': {
            'firstname': {
                'type': 'string'
            },
            'lastname': {
                'type': 'string'
            },
            'username': {
                'type': 'string',
                 'unique': True
            },
            'password': {
                'type': 'string'
            },
            'phone': {
                'type': 'string'
            }
        }
    }
}

Seperti yang Anda lihat dalam kode di atas, kami telah mendefinisikan bidang kunci yang diperlukan untuk membuat pengguna dan tipe datanya ditentukan dalam skema. Simpan perubahan dan jalankan api.py . Dari Postman Client coba lakukan request POST beserta parameter yang dibutuhkan ke http://127.0.0.1/user seperti yang ditunjukkan:

Pada permintaan POST kepada pengguna, itu melemparkan 405 Method Not Allowed kesalahan. Secara default EVE hanya menerima permintaan GET. Jika kita ingin menggunakan metode lain, kita perlu mendefinisikannya secara eksplisit. Buka settings.py dan tentukan metode sumber daya seperti yang ditunjukkan :

RESOURCE_METHODS = ['GET', 'POST']

Simpan perubahan dan jalankan api.py . Sekarang coba lagi ke POST ke pengguna dan Anda akan mendapatkan respons di bawah ini:

Seperti yang Anda lihat, permintaan POST di atas berhasil. Kami belum menentukan konfigurasi basis data di settings.py kami , jadi EVE menyelesaikan permintaan menggunakan instance berjalan MongoDB . Mari masuk ke MongoDB shell dan lihat catatan yang baru dibuat. Dengan instance MongoDB berjalan, picu shell mongo:

mongo

Setelah berada di dalam mongo shell, buat daftar semua database yang tersedia.

show databases;

Harus ada eve basis data. Beralih ke eve basis data.

use eve;

Jalankan show perintah untuk membuat daftar tabel di dalam eve basis data.

show tables;

Tabel yang terdaftar harus memiliki tabel bernama user . Buat daftar catatan dari user tabel menggunakan perintah berikut:

db.user.find()

Berikut adalah catatan yang dipilih dari tabel pengguna:

Validasi API Pengguna

Selanjutnya kita akan membuat API untuk memvalidasi pengguna yang ada. Biasanya, jika kita melakukan get permintaan ke titik akhir pengguna (http://127.0.0.1:5000/user), itu akan memberikan rincian semua pengguna terdaftar dari database. Kita perlu menerapkan dua hal di sini. Pertama, kita perlu mengautentikasi pengguna menggunakan nama depan dan sandi, dan kedua kita perlu mengembalikan detail pengguna dari database pada autentikasi yang berhasil.

Untuk mendapatkan detail berdasarkan nama depan, kita perlu menambahkan bidang pencarian tambahan di DOMAIN di settings.py .

'additional_lookup': {
            'url': 'regex("[\w]+")',
            'field': 'username',
            }

Seperti yang terlihat pada kode di atas, kami telah menambahkan bidang pencarian untuk username . Sekarang ketika permintaan GET dikirim ke http://127.0.0.1:5000/user/ <username> itu akan mengembalikan detail pengguna dengan username tertentu . Saat membuat permintaan ke pengguna tertentu, kami juga akan mengirimkan username dan password untuk otentikasi.

Kami akan melakukan otentikasi dasar untuk memverifikasi pengguna tertentu berdasarkan nama pengguna dan kata sandi. Pertama, kita perlu mengimpor Basic Auth kelas dari EVE. Buat kelas bernama Authenticate untuk mengimplementasikan otentikasi seperti yang ditunjukkan:

from eve.auth import BasicAuth

class Authenticate(BasicAuth):
    def check_auth(self, username, password, allowed_roles, resource,
                   method):
                   

Sekarang, ketika sumber dayanya adalah user dan metode permintaan adalah GET , kami akan mengautentikasi pengguna. Pada otentikasi yang berhasil, detail pengguna dari pengguna dengan nama depan di titik akhir API akan dikembalikan. Kami juga akan membatasi pembuatan pengguna dengan memberikan nama pengguna dan kata sandi. Jadi, jika metodenya adalah POST dan titik akhir API adalah pengguna, kami akan memeriksa dan memvalidasi nama pengguna dan kata sandi. Nah, ini dia Authenticate selengkapnya kelas:

class Authenticate(BasicAuth):
    def check_auth(self, username, password, allowed_roles, resource,
                   method):
        if resource == 'user' and method == 'GET':
            user = app.data.driver.db['user']
            user = user.find_one({'username': username,'password':password})
            if user:
                return True
            else:
                return False
        elif resource == 'user' and method == 'POST':
            return username == 'admin' and password == 'admin'
        else:
            return True

Kita harus melewati Authenticate nama kelas saat memulai API. Jadi ubah kode inisiasi API seperti yang ditunjukkan:

if __name__ == '__main__':
    app = Eve(auth=Authenticate)
    app.run()

Simpan semua perubahan dan jalankan api.py . Coba kirim permintaan autentikasi dasar dengan nama pengguna dan sandi dari Tukang Pos ke http://127.0.0.1/user/namapengguna (ganti nama pengguna dengan nama pengguna lain yang ada). Pada otentikasi yang berhasil, Anda akan mendapatkan detail pengguna sebagai tanggapan seperti yang ditunjukkan:

Tambahkan, Hapus, dan Perbarui Item 

Tambahkan API Item

Untuk membuat Add item API, yang perlu kita lakukan hanyalah membuat skema baru untuk item di settings.py .

'item': {
        'schema': {
            'name':{
                'type': 'string'
                },
            'username': {
                'type': 'string'
                }
            }
        }

Add Item API akan membantu setiap pengguna yang masuk untuk menambahkan item. Kami akan menyimpan item bersama dengan nama pengguna pengguna yang memasukkan item. Simpan perubahan dan coba lakukan permintaan POST ke http://127.0.0.1/item seperti yang ditunjukkan:

Hapus API Item

Untuk menghapus item yang dibuat oleh pengguna, yang perlu kita lakukan hanyalah memanggil titik akhir item /item_id . Tapi hanya memanggil permintaan DELETE tidak akan menghapus item. Untuk menghapus item, kami juga perlu memberikan _etag berhubungan dengan item tertentu. Sekali item id dan _etag cocok, item akan dihapus dari database. Berikut adalah cara metode DELETE dipanggil di titik akhir item.

Perbarui API Item

Update API mirip dengan Delete API. Yang harus kita lakukan adalah mengirim permintaan PATCH dengan item id dan _etag dan bidang formulir yang perlu diperbarui. Berikut adalah bagaimana detail item diperbarui:


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Mongoid atau MongoMapper?

  2. Bagaimana cara menggunakan mongodb dengan elektron?

  3. TransactionRequiredException Menjalankan kueri pembaruan/penghapusan

  4. perbedaan luwak dari findOneAndUpdate dan update

  5. Redis atau Mongo untuk menentukan apakah suatu angka termasuk dalam rentang?