Как я могу вернуть два API в одном GET? - PullRequest
0 голосов
/ 07 января 2019

Прежде всего, я хочу сказать, что я новичок в программировании. Я использую ASP.net и пытаюсь создать API для личного проекта и использую JSON для результатов.

Я могу сделать две страницы, которые выглядят так (отредактировано для удобства чтения).

{
    "user": 
        {"owner_id":1, "name":"Joe", "country":"USA"}, 
        {"owner_id":2, "name":"Bob", "country":"Canada"}
} 

{
    "pet": 
        {"id":1, owner_id:"1", "animal":"dog", "name":"Spot"}, 
        {"id":2, owner_id:"2", "animal":"cat", "name":"Snowball"}, 
        {"id":3, owner_id:"2", "animal":"fish", "name":"Bubble"} 
}

Я хочу объединить эти две страницы в одну API-страницу «владельцев», которая выглядит примерно так:

[
    {
        "user": 
        [
            "owner_id":1, "name":"Joe", "country":"USA"
        ], 
        "pet":
        [
            "id":1, owner_id:"1", "animal":"dog", "name": "Spot"
        ]
    }, 

    {
        "user":
        [
            "owner_id":2, "name": "Bob", "country": "Canada"
        ], 
        "pet": 
        [
            "id":2, owner_id:"2", "animal":"cat", "name":"Snowball"
        ], 
        [
            "id":3, owner_id:"2", "animal":"fish", "name":"Bubble"
        ]
    }
]

Я много гуглил и проверял здесь, и многие объяснения идут мне в голову. Я попробовал тонну, и даже самые красивые на вид не сработали.

Вот пример того, что я попробовал, но это не сработало ..

using System.Collections.Generic;

namespace TestAPI.Models

public class user
{
    public int id { get; set; }
    public string name { get; set; }
    public string country { get; set; }
}

public class pet
{
    public int id { get; set; }
    public string animal { get; set; }
    public string name { get; set; }
    public int owner_id { get; set; } 
}

public class owner
{
    public int Id { get; set; }
    public List<user> user{ get; set; }
    public List<pet> pet{ get; set; }
}

Вот пример одного из ... множества разных неправильных результатов, которые я получил, пытаясь это сделать.

[{"Id":1,"user":null,"pet":null},
{"Id":2,"user":null,"pet":null}]

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

Ответы [ 2 ]

0 голосов
/ 07 января 2019

Создайте API-оболочку, которая вызывает API-интерфейс животного и пользователя, объединяет результаты и возвращает его. Так что вам нужно будет сделать 1 вызов, чтобы объединить оба набора данных. После вызова API оболочки он будет вызывать как API, так и после этого вы можете перебирать коллекцию пользователей и добавлять каждого питомца в новую модель слияния (Ex UserWithPet), и, как предлагается, вы можете использовать Newtonsoft для простого преобразования в Json. Класс пользователя выше кажется хорошим способом.

0 голосов
/ 07 января 2019

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

public class Owner {
    public int Id {get;set;}
    public string Name {get;set;}
    public string Country {get;set}
}

public class Pet {
    public int Id { get; set; }
    public string Animal { get; set; }
    public string Name { get; set; }
    public int OwnerId { get; set; } 
}

public class User {
    public int Id {get;set;}
    public List<Owner> Owners {get;set;}
    public List<Pet> Pets {get;set}
}

Теперь, когда вы возвращаете пользовательский объект из вызова API, я предполагаю, что это то, что вы делаете, вы должны получить то, что ожидаете.

Обновлено на основе нулевых списков. Я хотел бы добавить конструктор для пользователя и установить для ваших домашних животных и владельцев пустой список.

public class User {
    public int Id {get;set;}
    public List<Owner> Owners {get;set;}
    public List<Pet> Pets {get;set;}

    public User() {
        Owners = new List<Owner>():
        Pets = new List<Pet>():
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...