Десериализация вложенного JSON ответа API с Django - PullRequest
0 голосов
/ 03 мая 2020

Я довольно новичок в DRF и сериализации / десериализации. Я медленно строю информационную панель для своего бизнеса во время коронного вируса и учусь кодировать. Я немного разбираюсь, но потратив более 10 тысяч долларов на разработчиков и не добиваясь большого результата, я решил, что мне терять?

Наш провайдер программного обеспечения имеет полный API для наших нужд https://developer.myvr.com/api/, но абсолютно не имеет панели управления для отображения статистики о данных бронирования наших клиентов.

Конечный результат будет синхронизация некоторых данных из их API в мою базу данных, которая будет размещена через AWS. Я решил сделать это таким образом из-за необходимости выполнять некоторую постобработку данных из API. Например, нам необходимо рассчитать показатели занятости (которые не являются конечной точкой), расходы по нашему учетному соединению и некоторые другие небольшие вычисления, в которых данные еще не находятся в предоставленном API. Изначально я хотел использовать данные только из API, но я колеблюсь из-за приведенных выше причин.

Вот предыстория, вот вопросы:

  1. Ответ API является чрезвычайно сложным и вложенным несколько раз, какова лучшая практика для извлечения репликации структуры данных в мою собственную базу данных? Должен ли я создавать модели для каждого поля вручную?

Пример ответа:

```{
"uri": "https://api.myvr.com/v1/properties/b6b0f2fe278f612b/", 
"id": "b6b0f2fe278f612b", 
"key": "b6b0f2fe278f612b", 
"accessDescription": null, 
"accommodates": 11, 
"active": false, 
"addressOne": "11496 Zermatt Dr", 
"addressTwo": null, 
"allowTurns": true, 
"amenities": "https://api.myvr.com/v1/property-amenities/?propertyId=b6b0f2fe278f612b", 
"automaticallyApprove": false, 
"baseNightlyRate": "395.00", 
"baseRate": {
    "uri": "https://api.myvr.com/v1/rates/660c299d4785c32e/", 
    "id": "660c299d4785c32e", 
    "key": "660c299d4785c32e", 
    "externalId": null, 
    "baseRate": true, 
    "changeoverDay": null, 
    "created": "2019-01-19T08:02:36Z", 
    "currency": "USD", 
    "endDate": "2020-01-18", 
    "minStay": 3, 
    "modified": "2019-01-19T08:02:36Z", 
    "monthly": 0, 
    "name": "Base Rate", 
    "weekNight": 39500, 
    "nightly": 39500, 
    "position": 0, 
    "property": {
        "name": "API Demo Property", 
        "uri": "https://api.myvr.com/v1/properties/b6b0f2fe278f612b/", 
        "id": "b6b0f2fe278f612b", 
        "externalId": null, 
        "key": "b6b0f2fe278f612b", 
        "slug": "api-demo-property"
    }, 
    "ratePlan": {
        "uri": "https://api.myvr.com/v1/rate-plans/862caa3f5267602d/", 
        "key": "862caa3f5267602d", 
        "name": "Default Rates for Property"
    }, 
    "repeat": true, 
    "startDate": "2020-01-18", 
    "weekend": 0, 
    "weekendNight": 0, 
    "weekly": 250000
}, 
"bathrooms": "4.0", 
"bedrooms": 4, 
"bookingUrl": "https://myvr.com/reservation/redirect/booking/b6b0f2fe278f612b/", 
"checkInTime": "16:00:00", 
"checkOutTime": "10:00:00", 
"city": "Truckee", 
"commissionStructure": null, 
"countryCode": "US", 
"created": "2016-01-19T00:01:48Z", 
"currency": "USD", 
"customFields": {}, 
"description": "Luxurious living, scenic mountain setting, entertainment galore. Located on a quiet street in Tahoe Donner, our well equipped modern home is nestled into the wilderness. A babbling creek greets visitors approaching the front step as it collects into a small pond with a cascading waterfall. <br/>\n<br/>\nInside, over 3,000 sqft of luxurious living space divides itself between two floors. On the first floor, a beautiful kitchen with granite counters, gas stove and stainless steel appliances opens to a large great room centered around a wood burning fireplace and featuring 30' soaring ceilings. A spacious loft overlooks the great room, showcasing a large poker/card table. Upstairs features a large entertainment room, complete with wet bar, shuffleboard table, and state-of-the-art television setup with surround sound. The scenic backyard is accessible from a large deck featuring a new hot tub with seating for 7.", 
"externalId": null, 
"feePlan": {
    "uri": "https://api.myvr.com/v1/fee-plans/4d1c44383755051b/", 
    "key": "4d1c44383755051b", 
    "name": "Default Fees for Listing"
}, 
"headline": "Beautiful Four Bedroom Lake Front Property", 
"houseRules": null, 
"instantBookingsEnabled": false, 
"lat": "39.3422523000", 
"level": "unit", 
"localAreaDescription": "Tahoe Donner is a year round activity resort. The amenities include private beach/boat launching facilities, pools, recreation center, tennis, horseback riding, golf, downhill skiing as well as cross country skiing. Truckee is a historical mining town-having a western feel but also has museums, theaters, fine dining plus 2 large supermarkets-all less than 3 miles from the house. Our home is also located within a 15 minute drive to 4 major ski resorts. Downtown Reno is a short 40 minute drive away for those seeking a night on the town or the thrill of a Nevada casino.", 
"lon": "-120.2271947000", 
"lowestNightlyRate": "395.00", 
"manual": "", 
"modified": "2019-10-18T17:18:43Z", 
"name": "API Demo Property", 
"owner": null, 
"postalCode": "96161", 
"ratePlan": {
    "uri": "https://api.myvr.com/v1/rate-plans/862caa3f5267602d/", 
    "key": "862caa3f5267602d", 
    "name": "Default Rates for Property"
}, 
"ratePlanLocked": false, 
"region": "CA", 
"shortCode": "API", 
"size": 3000, 
"slug": "api-demo-property", 
"suitableElderly": "yes", 
"suitableEvents": "unknown", 
"suitableGroups": "yes", 
"suitableHandicap": "no", 
"suitableInfants": "unknown", 
"suitableKids": "yes", 
"suitablePets": "no", 
"suitableSmoking": "no", 
"transitDescription": null, 
"type": "house", 
"weekendNights": [
    5, 
    6
]

} `` `

Я думаю, что лучший способ заполнить базу данных - запустить пользовательскую команду управления для запуска сценария, который был отключен. Я делал это ранее с другой базой данных, однако я все еще застрял, так как не хочу написать эти модели вручную. Также вызывает беспокойство, если поле отсутствует или структура меняется.

Этот проект определенно выше моих навыков и чрезвычайно амбициозен, но я был бы признателен за любые отзывы или советы, которые кто-либо мог бы получить.

Спасибо, Даррен

...