PythonのウェブフレームワークDjangoで作成したREST APIを公開したので是非使ってみてください。
自由にCRUD作業してOKです。今のところはリクエスト数に制限もありません。
http://172.104.81.40/api/
ただし1時間ごとにDBがデフォルトに戻るので入力されたデータは削除されることになります。
良かったら自分でホスティングしているサイトとYouTubeがあるので他の記事も見てみてください。
APIの概要
このAPIはコールセンターをイメージしたDBを構成し、CRUD操作(Create,Read,Update,Delete)を可能にしたAPIです。
もう一つにトークン認証でログインしたユーザーのみアクセスできるAPIも別に公開しています。
そちらは、81番ポートからアクセスしてください。今回はトークン認証の不要なAPIのみ紹介します。
利用可能なAPI
このURL(URI)にアクセスすると、下記のように各URLからAPIにアクセスできます。
"office": "http://172.104.81.40/api/office/",
"staff": "http://172.104.81.40/api/staff/",
"tickets": "http://172.104.81.40/api/tickets/",
"ticket-categories": "http://172.104.81.40/api/ticket-categories/",
"company": "http://172.104.81.40/api/company/",
"store": "http://172.104.81.40/api/store/",
"customer-contact": "http://172.104.81.40/api/customer-contact/"
Office:オフィス情報のAPIです。
Staff:従業員のAPIです。Officeの情報が紐づいています。
Tickets:お客様からのコール情報に他のテーブル(スタッフ、店舗情報、チケットカテゴリ)が紐づいています。
Ticket-Categories:コールのカテゴリ情報です。
Company:企業情報です。
StoreS:各企業の店舗情報です。
Customer-contact:お客様の連絡先です。
Djangoセットアップの手順
下記のURLにソースコードがアップロードされているので自由にクローンして使ってください。
Gitを使ってクローンからセットアップまでの手順です。
git clone https://github.com/TraitOtaku/Django-TicketAppAPI.git
cd Django-TicketAppAPI
virtualenv env
bin\Scripts\activate
pip install -r requirements.txt
python manage.py makemigrations
python manage.py migrate
python manage.py createsuperuser
python manage.py runserver
モデルの内容
各アプリのmodels.pyを参照して受け入れるデータタイプとデータが必須かどうかを確認してください。
blank=True, null=Trueの場合はデータがなしでもOKです。
class Ticket(models.Model):
category = models.ForeignKey(
TicketCategory, on_delete=models.PROTECT, related_name="category_name")
created_by = models.ForeignKey(
'members.Member', on_delete=models.PROTECT, blank=True, null=True, default=None, related_name='ticket_created_by')
updated_by = models.ForeignKey(
'members.Member', on_delete=models.PROTECT, blank=True, null=True, default=None, related_name='ticket_updated_by')
ticket_date = models.DateTimeField(blank=True, null=True)
is_open = models.BooleanField(default=False)
is_email = models.BooleanField(default=False)
complete_by = models.DateField(blank=True, null=True)
open_details = models.CharField(max_length=100, null=True, blank=True)
inquiry = models.CharField(max_length=1000)
respond = models.CharField(max_length=1000)
# Custromer Info
company = models.ForeignKey(Company, on_delete=models.PROTECT, blank=True, null=True)
store = models.ForeignKey(Store, on_delete=models.PROTECT, blank=True, null=True)
is_contact = models.BooleanField(default=False)
contact = models.ForeignKey(CustomerContact, on_delete=models.PROTECT, blank=True, null=True)
contact_name = models.CharField(max_length=100, blank=True, null=True)
email = models.EmailField(max_length=100, blank=True, null=True)
phone = models.CharField(max_length=100, blank=True, null=True)
シリアライザーの内容
各アプリのSerializers.pyが先ほどのDBとコミュニケーションをとるmodels.pyをシリアル化してAPIの役目をします。チケットの例でいうとReadのGETリクエストが来たときとその他のリクエストで別々のリスポンスを返すようにしています。その設定はViews.pyで行いますが、APIの内容はここで決めます。
class TicketSerializer(serializers.ModelSerializer):
# ticket_date = serializers.DateTimeField()
ticket_date = serializers.DateTimeField(
format="%m/%d/%Y %H:%M", input_formats=["%m/%d/%Y %H:%M"])
# complete_by = serializers.DateField(allow_null=True)
# complete_by = serializers.DateField(
# format="%m/%d/%Y", allow_null=True)
complete_by = serializers.DateField(
format="%m/%d/%Y", input_formats=["%m/%d/%Y"], allow_null=True)
class Meta:
model = Ticket
fields = '__all__'
# depth = 1
class TicketReadSerializer(TicketSerializer):
category = CategorySerializer(read_only=True)
updated_by = MemberSerializer(read_only=True)
created_by = MemberSerializer(read_only=True)
escalated_to = MemberSerializer(read_only=True)
contact = CustomerContactReadSerializer(read_only=True)
store = StoreSerializer(read_only=True)
company = CompanySerializer(read_only=True)
UIからデータを操作してみる
では、実際にDjangoのAPIのUIを使用してデータを操作してみましょう。
{
"ticket_date": "01/01/2022 21:15",
"complete_by": null,
"is_open": false,
"is_email": false,
"open_details": "",
"inquiry": "新しいパソコンが欲しい",
"respond": "しょうがないね",
"is_contact": false,
"contact_name": "",
"email": "okyakusama@ichiban.com",
"phone": "123-123-123",
"category": 1,
"created_by": 1,
"updated_by": null,
"company": null,
"store": 1,
"contact": null
}
上記のJSONデータを入れてあげると、DjangoからAcceptのリスポンスが返されてデータが追加されました。
レコードの更新と削除
先ほど作成したレコードはIDが1で作成されました。このデータにアクセスするには下記のようにURLの最後にIDを追加すればOKです。
そうするとDELETEのオプションと下記にPUTとPATCHのオプションが追加されるのでそこからレコードを削除するなり修正するなりできます。
同じ記事はこちらかも見れます。
https://asameshicode.com/django-rest-api-demo/
お疲れ様でした。