Nulis API dina Python (kalayan Flask sareng RapidAPI)
Lamun nuju maca artikel ieu, Anjeun meureun geus wawuh jeung kemungkinan nu datang kalawan ngagunakeun hiji API (Application Programming Interface).
Ku nambahkeun salah sahiji loba API kabuka pikeun aplikasi Anjeun, Anjeun bisa manjangkeun pungsionalitas aplikasi atawa enrich eta kalawan data diperlukeun. Tapi kumaha upami anjeun ngembangkeun fitur unik anu anjeun hoyong bagikeun ka masarakat?
Dina jawaban eta basajan: anjeun peryogi nyieun API sorangan.
Sanajan ieu bisa sigana kawas tugas hésé dina mimitina, éta sabenerna basajan. Kami bakal nunjukkeun anjeun kumaha ngalakukeun ieu nganggo Python.
Naon anu anjeun peryogikeun pikeun ngamimitian
Pikeun ngembangkeun API anjeun peryogi:
Python3;
Flask — kerangka anu sederhana sareng gampang dianggo pikeun nyiptakeun aplikasi wéb;
Flask-RESTful mangrupa extension pikeun Flask nu ngidinan Anjeun pikeun ngamekarkeun REST API gancang tur kalawan konfigurasi minimal.
Pamasangan dilaksanakeun nganggo paréntah:
pip install flask-restful
Kami nyarankeun kursus program intensif gratis pikeun pamula: Pangembangan bot Telegram dina C # — 26–28 Agustus. Kursus intensif gratis anu ngamungkinkeun anjeun ngartos kumaha asisten bot damel, spésifikasi gawé bareng Telegram API sareng nuansa sanésna. Tilu pamilon pangalusna bakal nampa 30 rubles ti Skillbox.
Pikeun ngartos tugasna, hayu urang ngartos dua istilah anu disebatkeun di luhur.
Naon ari REST?
REST API (Representational State Transfer) nyaéta API anu ngagunakeun pamundut HTTP pikeun tukeur data.
REST API kedah minuhan kriteria nu tangtu:
Arsitéktur klien-server: Klién berinteraksi sareng antarbeungeut pangguna, sareng server berinteraksi sareng backend sareng neundeun data. Klién sareng server bebas, salah sahijina tiasa digentos sacara misah ti anu sanés.
Stateless - euweuh data klien disimpen dina server. Kaayaan sési disimpen di sisi klien.
Cacheability - Klién tiasa cache réspon server pikeun ngaronjatkeun kinerja sakabéh.
Naon CRUD?
atah mangrupakeun konsép programming anu ngajelaskeun opat lampah dasar (nyieun, maca, ngamutahirkeun jeung ngahapus).
Dina REST API, jinis pamundut sareng metode pamenta tanggung jawab pikeun tindakan sapertos posting, kéngingkeun, nempatkeun, ngahapus.
Ayeuna urang ngartos istilah dasar, urang tiasa ngamimitian nyieun API.
rarancang
Hayu urang nyieun gudang tina tanda petik ngeunaan kecerdasan jieunan. AI mangrupikeun salah sahiji téknologi anu paling gancang ngembang ayeuna, sareng Python mangrupikeun alat anu populér pikeun damel sareng AI.
Kalayan API ieu, pamekar Python tiasa gancang kéngingkeun inpormasi ngeunaan AI sareng diideuan ku kamajuan énggal. Upami pamekar gaduh pamikiran anu berharga dina topik ieu, anjeunna bakal tiasa nambihanana kana gudang.
Hayu urang mimitian ku ngimpor modul anu diperyogikeun sareng nyetél Flask:
from flask import Flask
from flask_restful import Api, Resource, reqparse
import random
app = Flask(__name__)
api = Api(app)
Dina snippet ieu, Flask, Api sareng Sumberdaya mangrupikeun kelas anu urang peryogikeun.
Reqparse mangrupakeun panganteur query parsing Flask-RESTful ... Anjeun ogé bakal butuh modul acak pikeun nembongkeun hiji cutatan acak.
Ayeuna urang bakal nyiptakeun gudang kutipan ngeunaan AI.
Unggal éntri repo bakal ngandung:
ID digital;
ngaran pangarang cutatan;
cutatan.
Kusabab ieu ngan conto latihan, urang bakal nyimpen sakabéh éntri dina daptar Python. Dina aplikasi nyata, urang dipikaresep bakal ngagunakeun database gantina.
ai_quotes = [
{
"id": 0,
"author": "Kevin Kelly",
"quote": "The business plans of the next 10,000 startups are easy to forecast: " +
"Take X and add AI."
},
{
"id": 1,
"author": "Stephen Hawking",
"quote": "The development of full artificial intelligence could " +
"spell the end of the human race… " +
"It would take off on its own, and re-design " +
"itself at an ever increasing rate. " +
"Humans, who are limited by slow biological evolution, " +
"couldn't compete, and would be superseded."
},
{
"id": 2,
"author": "Claude Shannon",
"quote": "I visualize a time when we will be to robots what " +
"dogs are to humans, " +
"and I’m rooting for the machines."
},
{
"id": 3,
"author": "Elon Musk",
"quote": "The pace of progress in artificial intelligence " +
"(I’m not referring to narrow AI) " +
"is incredibly fast. Unless you have direct " +
"exposure to groups like Deepmind, " +
"you have no idea how fast — it is growing " +
"at a pace close to exponential. " +
"The risk of something seriously dangerous " +
"happening is in the five-year timeframe." +
"10 years at most."
},
{
"id": 4,
"author": "Geoffrey Hinton",
"quote": "I have always been convinced that the only way " +
"to get artificial intelligence to work " +
"is to do the computation in a way similar to the human brain. " +
"That is the goal I have been pursuing. We are making progress, " +
"though we still have lots to learn about " +
"how the brain actually works."
},
{
"id": 5,
"author": "Pedro Domingos",
"quote": "People worry that computers will " +
"get too smart and take over the world, " +
"but the real problem is that they're too stupid " +
"and they've already taken over the world."
},
{
"id": 6,
"author": "Alan Turing",
"quote": "It seems probable that once the machine thinking " +
"method had started, it would not take long " +
"to outstrip our feeble powers… " +
"They would be able to converse " +
"with each other to sharpen their wits. " +
"At some stage therefore, we should " +
"have to expect the machines to take control."
},
{
"id": 7,
"author": "Ray Kurzweil",
"quote": "Artificial intelligence will reach " +
"human levels by around 2029. " +
"Follow that out further to, say, 2045, " +
"we will have multiplied the intelligence, " +
"the human biological machine intelligence " +
"of our civilization a billion-fold."
},
{
"id": 8,
"author": "Sebastian Thrun",
"quote": "Nobody phrases it this way, but I think " +
"that artificial intelligence " +
"is almost a humanities discipline. It's really an attempt " +
"to understand human intelligence and human cognition."
},
{
"id": 9,
"author": "Andrew Ng",
"quote": "We're making this analogy that AI is the new electricity." +
"Electricity transformed industries: agriculture, " +
"transportation, communication, manufacturing."
}
]
Ayeuna urang kudu nyieun kelas sumberdaya Quote anu bakal nangtukeun operasi titik tungtung API urang. Di jero kelas anjeun kedah nyatakeun opat metode: kéngingkeun, pasang, nempatkeun, ngahapus.
Hayu urang mimitian ku metoda GET
Ieu ngamungkinkeun pikeun meunangkeun cutatan husus ku nangtukeun ID na, atawa cutatan acak lamun ID teu dieusian.
class Quote(Resource):
def get(self, id=0):
if id == 0:
return random.choice(ai_quotes), 200
for quote in ai_quotes:
if(quote["id"] == id):
return quote, 200
return "Quote not found", 404
Metoda GET mulih kutipan acak lamun ID ngandung nilai standar, i.e. euweuh ID dieusian nalika nelepon metoda.
Lamun dieusian, mangka métode maluruh diantara citations sarta manggihan hiji nu ngandung ID dieusian. Upami teu aya anu kapendak, pesen "Kutipan henteu kapendak, 404" ditampilkeun.
Émut: metodeu ngabalikeun status HTTP 200 upami pamundutna suksés sareng 404 upami catetan henteu kapendak.
Ayeuna hayu urang ngadamel metode POST pikeun nambihan kutipan énggal kana gudang
Bakal kéngingkeun ID unggal kutipan énggal nalika anjeun ngetik. Salaku tambahan, POST bakal nganggo reqparse pikeun ngémutan parameter anu bakal aya dina badan pamundut (panulis sareng kutipan téks).
def post(self, id):
parser = reqparse.RequestParser()
parser.add_argument("author")
parser.add_argument("quote")
params = parser.parse_args()
for quote in ai_quotes:
if(id == quote["id"]):
return f"Quote with id {id} already exists", 400
quote = {
"id": int(id),
"author": params["author"],
"quote": params["quote"]
}
ai_quotes.append(quote)
return quote, 201
Dina kode di luhur, metode POST nampi ID kutipan. Teras, nganggo reqparse, éta nyandak panulis sareng kutipan tina pamundut, disimpen dina kamus params.
Upami kutipan sareng ID anu ditunjuk parantos aya, metodena nunjukkeun pesen sareng kode 400 anu saluyu.
Upami kutipan sareng ID anu ditangtukeun henteu acan didamel, metodena nyiptakeun rékaman énggal kalayan ID sareng panulis anu ditangtukeun, ogé parameter anu sanés. Teras nambihan éntri kana daptar ai_quotes sareng mulangkeun éntri kalayan kutipan énggal sareng kode 201.
Ayeuna urang nyiptakeun metode PUT pikeun ngarobih kutipan anu tos aya dina gudang
Metoda PUT, sarupa jeung conto saméméhna, nyokot ID na input sarta parses parameter cutatan maké reqparse.
Upami aya kutipan sareng ID anu ditangtukeun, metodena bakal ngamutahirkeun ku parameter anyar teras kaluaran kutipan anu diropéa nganggo kode 200. Upami teu aya kutipan sareng ID anu ditunjuk, rékaman énggal kalayan kode 201 bakal didamel.
Tungtungna, hayu urang ngadamel metode DELETE pikeun ngahapus kutipan anu henteu deui mereun
def delete(self, id):
global ai_quotes
ai_quotes = [qoute for qoute in ai_quotes if qoute["id"] != id]
return f"Quote with id {id} is deleted.", 200
Metoda ieu nampi ID kutipan salaku input sareng ngapdet daptar ai_quotes nganggo daptar anu dibagikeun.
Ayeuna urang parantos nyiptakeun sadaya metode, anu kedah urang laksanakeun nyaéta ngan ukur nambihan sumber pikeun API, nyetél jalur, sareng ngajalankeun Flask.
api.add_resource(Quote, "/ai-quotes", "/ai-quotes/", "/ai-quotes/<int:id>")
if __name__ == '__main__':
app.run(debug=True)
Service REST API kami geus siap!
Salajengna, urang tiasa nyimpen kodeu kana file app.py ku ngajalankeun éta dina konsol nganggo paréntah:
python3 app.py
Upami sadayana saé, maka urang bakal nampi sapertos kieu:
* Modeu debug: on
* Ngajalankeun 127.0.0.1:5000/ (Pencét Ctrl+C pikeun kaluar)
* Balikan deui sareng stat
* Debugger aktip!
* PIN Debugger: XXXXXXX
Nguji API
Sakali API dijieun, éta perlu diuji.
Ieu tiasa dilakukeun nganggo utilitas konsol curl atanapi klien Insomnia REST, atanapi ku nyebarkeun API dina Rapid API.
Nyebarkeun API kami
RapidAPI mangrupikeun pasar panggedéna di dunya kalayan langkung ti 10 API (sareng sakitar 000 juta pamekar).
RapidAPI henteu ngan ukur nyayogikeun antarmuka tunggal pikeun damel sareng API pihak katilu, tapi ogé ngamungkinkeun anjeun gancang sareng gampang nyebarkeun API anjeun nyalira.
Kumaha cara nambihan API Python anjeun ka pasar RapidAPI
Saatos jasa API anjeun diterbitkeun dina Heroku, anjeun tiasa nambihanana kana API Rapid. Ieuh dokuméntasi lengkep ngeunaan topik ieu.
1. Jieun akun RapidAPI.
Ngadaptarkeun akun gratis - ieu tiasa dilakukeun nganggo Facebook, Google, GitHub.
2. Tambahkeun API kana panel kontrol.
3. Salajengna, asupkeun informasi umum ngeunaan API Anjeun.
4. Saatos ngaklik "Tambahkeun API" kaca anyar nembongan dimana anjeun bisa ngasupkeun informasi ngeunaan API urang.
5. Ayeuna anjeun bisa boh sacara manual ngasupkeun titiktungtung API atawa ngundeur swagger-file ngagunakeun OpenAPI.
Nya, ayeuna urang kedah nyetél titik tungtung API urang dina halaman Endpoints. Dina kasus urang, titik tungtung pakait sareng konsép CRUD (meunang, masang, nempatkeun, ngahapus).
Salajengna, anjeun kedah nyiptakeun titik GET AI Quote anu nampilkeun kutipan acak (upami ID standar) atanapi kutipan pikeun ID anu ditangtukeun.
Pikeun nyieun titik tungtung, klik tombol "Jieun Endpoint".
Urang ngulang prosés ieu pikeun sakabéh titik tungtung API séjén. Éta hungkul! Gening, anjeun parantos nyebarkeun API anjeun!
Upami sadayana leres, halaman API bakal katingali sapertos kieu:
kacindekan
Dina artikel ieu, urang diajar prosés nyieun Service API RESTful anjeun sorangan dina Python, babarengan jeung prosés medarkeun API ka awan Heroku jeung nambahkeun kana diréktori RapidAPI.
Tapi versi test némbongkeun ukur prinsip dasar tina ngembangkeun API - nuances kayaning kaamanan, kasabaran sesar sarta scalability teu dianggap.
Nalika ngembangkeun API nyata, sadaya ieu kedah diperhatoskeun.