Архитектураи муштарӣ-сервер: муштарӣ бо интерфейси корбар ва сервер бо пуштибонӣ ва анбори додаҳо ҳамкорӣ мекунад. Мизоҷ ва сервер мустақиланд, ҳар кадоми онҳоро аз дигараш алоҳида иваз кардан мумкин аст.
RAW консепсияи барномасозӣ мебошад, ки чор амали асосиро (эҷод кардан, хондан, навсозӣ ва нест кардан) тавсиф мекунад.
Дар REST API намудҳои дархост ва усулҳои дархост барои амалҳо ба монанди интишор, гирифтан, гузоштан, нест кардан масъуланд.
Акнун, ки мо бо шартҳои асосӣ кор кардем, мо метавонем ба эҷоди API оғоз кунем.
Рушд
Биёед як анбори иқтибосҳо дар бораи зеҳни сунъӣ эҷод кунем. AI яке аз технологияҳои босуръат рушдёбанда имрӯз аст ва Python як воситаи маъмул барои кор бо AI мебошад.
Бо ин API, як таҳиягари Python метавонад зуд дар бораи AI маълумот гирад ва аз дастовардҳои нав илҳом гирад. Агар таҳиякунанда дар ин мавзӯъ фикрҳои арзишманд дошта бошад, вай метавонад онҳоро ба анбор илова кунад.
Биёед бо ворид кардани модулҳои зарурӣ ва насб кардани Flask оғоз кунем:
from flask import Flask
from flask_restful import Api, Resource, reqparse
import random
app = Flask(__name__)
api = Api(app)
Дар ин порча, Flask, Api ва Resource синфҳое мебошанд, ки ба мо лозиманд.
Ҳоло мо як анбори иқтибосҳо дар бораи AI эҷод мекунем.
Ҳар як сабти репо дар бар мегирад:
ID рақамӣ;
номи муаллифи иқтибос;
иқтибос.
Азбаски ин танҳо як мисоли омӯзишӣ аст, мо ҳама сабтҳоро дар рӯйхати Python нигоҳ медорем. Дар як барномаи воқеӣ, мо эҳтимолан ба ҷои он пойгоҳи додаҳоро истифода мебарем.
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."
}
]
Он ба шумо имкон медиҳад, ки иқтибоси мушаххасро тавассути муайян кардани ID-и он ё иқтибоси тасодуфӣ, агар ягон ID муайян нашуда бошад, гиред.
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
Усули GET иқтибоси тасодуфиро бармегардонад, агар ID дорои арзиши пешфарз бошад, яъне. Ҳангоми даъват кардани усул ID муқаррар карда нашудааст.
Агар он муқаррар карда шуда бошад, пас усул дар байни нохунакҳо ҷустуҷӯ мекунад ва онеро, ки ID-и додашударо дар бар мегирад, пайдо мекунад. Агар чизе ёфт нашавад, паёми "Иқтибос ёфт нашуд, 404" пайдо мешавад.
Дар хотир доред, ки усул ҳолати HTTP-ро 200-ро бармегардонад, агар дархост муваффақ бошад ва 404 агар вуруд ёфт нашавад.
Ҳангоми навиштани шумо он ID-и ҳар як иқтибоси навро мегирад. Илова бар ин, POST reqparse-ро барои таҳлили параметрҳое, ки дар бадани дархост дохил мешаванд (муаллиф ва матни иқтибос) истифода мебарад.
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
Дар рамзи боло, усули POST ID-и иқтибосро қабул кард. Сипас, бо истифода аз reqparse, он муаллиф ва иқтибосро аз дархост дарёфт карда, онҳоро дар луғати params нигоҳ дошт.
Агар иқтибос бо ID-и муайян аллакай мавҷуд бошад, пас усул паёми мувофиқ ва рамзи 400-ро нишон медиҳад.
Агар иқтибос бо ID-и муайяншуда ҳанӯз эҷод нашуда бошад, усул вуруди навро бо ID ва муаллифи мушаххас ва инчунин параметрҳои дигар эҷод мекунад. Он гоҳ ба рӯйхати ai_quotes вуруд илова мекунад ва вурудро бо иқтибоси нав дар баробари рамзи 201 бармегардонад.
Усули PUT, ки ба мисоли қаблӣ монанд аст, ID ва вурудро мегирад ва параметрҳои иқтибосро бо истифода аз reqparse таҳлил мекунад.
Агар иқтибос бо ID-и муайян мавҷуд бошад, усул онро бо параметрҳои нав навсозӣ мекунад ва сипас иқтибоси навшударо бо рамзи 200 мебарорад. Агар иқтибос бо ID-и муайяншуда ҳанӯз мавҷуд набошад, сабти нав бо рамзи 201 эҷод мешавад.