Angularv19'a restful API nasıl bağlanır?

Angular projesinin end pointlerini kendin yazmadin mi? Http/https request yapacaksin end pointlere.

Atiyorum user datasini getirdigin end point /user olsun. Bundan da POST yada GET ile user'in id'sini gonderdigini ve datayi oyle getirdigini varsayalim. POST'ta multi form post request olusturur, istek gonderirsin adrese, oda sana response dondurur user datasiyla belirli bir formatta, yada JSON atarsin, API'yi nasil olusturduguna bagli. Ister XML kullan dondurdugun datada, ister JSON. JSON daha yaygin kullaniliyor.

Eger GET atiyorsanda mesela kw (keyword) belirleyebilirsin yada positional parameter belirlersin. Kw belirliyorsan; /user?id=<id> olur mesela. Positional parametersa /user/<id> olabilir mesela gibi gibi. End pointleri kendin yazdiysan bunlari biliyorsundur zaten.

Yapacagin sey, bu end pointlere HTTP requesti atmak C# ustunden. HttpClient sinifini kullanabilirsin.
 
Angular projesinin end pointlerini kendin yazmadin mi? Http/https request yapacaksin end pointlere.

Atiyorum user datasini getirdigin end point /user olsun. Bundan da POST ya da GET ile User'in ID'sini gonderdigini ve datayi oyle getirdigini varsayalim. POST'ta multi form post request olusturur, istek gonderirsin adrese, oda sana response dondurur user datasiyla belirli bir formatta, ya da JSON atarsin, API'yi nasıl olusturduguna bagli. Ister XML kullan dondurdugun datada, ister JSON. JSON daha yaygin kullaniliyor.

Eger GET atiyorsanda mesela kW (keyword) belirleyebilirsin ya da positional parameter belirlersin. kW belirliyorsan; /user?id=<id> olur mesela. Positional parametersa /user/<id> olabilir mesela gibi gibi. End pointleri kendin yazdiysan bunlari biliyorsundur zaten.

Yapacagin şey, bu end pointlere HTTP requesti atmak C# ustunden. HttpClient sinifini kullanabilirsin.

Abi evet endpoinlteri ben yazdım tek tek ve Swagger'ım aktif olarak çalışıyor. Buradaki yapmak istediğim şey angularv19'da API'mi yani Visual Studio 2022 projemi nasıl Visual Studio Code projeme bağlarım bunu bilmiyorum. Dediklerini pek anlamadım anladığım kısım ise şöyle sanırım sen direkt C# kodu içerisine bir httpclient classı eklememi istiyorsun. Sanırım burada da Angular'daki local hostumu bağlayacağım. Fakat burada tam tersi olması gerekmez miydi yani Angular'ı apiye değil de API'yi angulara bağlamam gerekmez miydi mantıken hani. Tavsiyelerin için teşekkür ederim. Şimdi deneyeceğim olmazsa tekrardan yazarım. Daha önceden Angular V17'de yazdığım için kafam bayağı karıştı çünkü sistem tamamıyla değişmiş :D.
 
Abi evet endpoinlteri ben yazdım tek tek ve Swagger'ım aktif olarak çalışıyor. Buradaki yapmak istediğim şey angularv19'da API'mi yani Visual Studio 2022 projemi nasıl Visual Studio Code projeme bağlarım bunu bilmiyorum. Dediklerini pek anlamadım anladığım kısım ise şöyle sanırım sen direkt C# kodu içerisine bir httpclient classı eklememi istiyorsun. Sanırım burada da Angular'daki local hostumu bağlayacağım. Fakat burada tam tersi olması gerekmez miydi yani Angular'ı apiye değil de API'yi angulara bağlamam gerekmez miydi mantıken hani. Tavsiyelerin için teşekkür ederim. Şimdi deneyeceğim olmazsa tekrardan yazarım. Daha önceden Angular V17'de yazdığım için kafam bayağı karıştı çünkü sistem tamamıyla değişmiş :D.
C# kodunda sen local hostunu baglamiyorsun. Sen localhost'a baglaniyorsun. Belirledigin end pointe baglaniyorsun.

Daha net nasil anlatirim bilmiyorum.
Endpoint /user dedim mesela di mi? API'in sen localhost/user/<user_id> adresine gittiginde atiyorum sana JSON seklinde user datasini veriyor. Ornek olarak localhost/user/123 olsun. Senin serverinda gidiyor, 123 id'li user'in verisi getiriyor ve sana asagidaki gibi (ornek) bir JSON yaniti veriyor;

JSON:
{
    "id": "123",
    "username": "veryImportantUser",
    "name": "John",
    "surname": "Doe",
    "email": "johndoe@example.com",
    "active": true
}

Sen bu end pointe tarayicidan baglandiginda gerceklesen islem buysa, C# uzerinde HttpClient kullanarak, yine bu end point'e baglanabilirsin. Ornegin benim kendi API'm bana GitHub uzerindeki adini verdigim bana ait public repository'nin datasini sunuyor.

Asagidaki kodla GET istegi atiyorum;
C#:
public static async Task<string> ApiResponse(string endPoint) {
    using var client = new HttpClient();

    var response = await client.GetAsync($"{baseUrl}/api/{endPoint}");

    if (response.IsSuccessStatusCode) {
        return await response.Content.ReadAsStringAsync();
    }

    return "";
}

Mesela soyle kullandigimda:
C#:
// Eger async fonksiyonda cagirmiyorsan;
Console.WriteLine(ApiResponse("charged/main/pretty").Result);
// Eger async fonksiyonda cagiriyorsan;
Console.WriteLine(await ApiResponse("charged/main/pretty"));

Verecegi response;
JSON:
{
    "sha": "415f0ef915b2fbbf4be67c6f21eb7a98020b4bcd",
    "url": "https:\/\/api.github.com\/repos\/sametersoylu\/charged\/git\/trees\/415f0ef915b2fbbf4be67c6f21eb7a98020b4bcd",
    "tree": [
        {
            "path": ".gitignore",
            "mode": "100644",
            "type": "blob",
            "sha": "9c4891db9ea9927193807d797d89094d102dd06a",
            "size": 29,
            "url": "https:\/\/api.github.com\/repos\/sametersoylu\/charged\/git\/blobs\/9c4891db9ea9927193807d797d89094d102dd06a"
        },
        {
            "path": "CMakeLists.txt",
            "mode": "100644",
            "type": "blob",
            "sha": "4430da7c3be6e2981f5375b3f4528a3f6b815a8d",
            "size": 250,
            "url": "https:\/\/api.github.com\/repos\/sametersoylu\/charged\/git\/blobs\/4430da7c3be6e2981f5375b3f4528a3f6b815a8d"
        },
        {
            "path": "Daemon",
            "mode": "040000",
            "type": "tree",
            "sha": "e941aa1f9f44185086c9486f5287e181400dcf37",
            "url": "https:\/\/api.github.com\/repos\/sametersoylu\/charged\/git\/trees\/e941aa1f9f44185086c9486f5287e181400dcf37"
        },
        {
            "path": "Daemon\/ChargeCheck.h",
            "mode": "100644",
            "type": "blob",
            "sha": "a6f10ccf9da64a37d0ce1ff6193d8c75f7eca896",
            "size": 3810,
            "url": "https:\/\/api.github.com\/repos\/sametersoylu\/charged\/git\/blobs\/a6f10ccf9da64a37d0ce1ff6193d8c75f7eca896"
        },
        {
            "path": "Daemon\/Fork.h",
            "mode": "100644",
            "type": "blob",
            "sha": "7b9aa7661f24f866a2ae7e34eb62e06e22be9eae",
            "size": 1585,
            "url": "https:\/\/api.github.com\/repos\/sametersoylu\/charged\/git\/blobs\/7b9aa7661f24f866a2ae7e34eb62e06e22be9eae"
        },
        {
            "path": "Daemon\/Functional.h",
            "mode": "100644",
            "type": "blob",
            "sha": "a92d3f497ba7d6d1938567b54124b9a9412b3fb8",
            "size": 1089,
            "url": "https:\/\/api.github.com\/repos\/sametersoylu\/charged\/git\/blobs\/a92d3f497ba7d6d1938567b54124b9a9412b3fb8"
        },
        {
            "path": "Daemon\/main.cpp",
            "mode": "100644",
            "type": "blob",
            "sha": "25cfcc15bc8e9984757cf8bbadf82a9247caaee2",
            "size": 8717,
            "url": "https:\/\/api.github.com\/repos\/sametersoylu\/charged\/git\/blobs\/25cfcc15bc8e9984757cf8bbadf82a9247caaee2"
        },
        {
            "path": "Dispatch",
            "mode": "040000",
            "type": "tree",
            "sha": "b3cee760b9bfb080709bd2541b1e9b5ca44578e7",
            "url": "https:\/\/api.github.com\/repos\/sametersoylu\/charged\/git\/trees\/b3cee760b9bfb080709bd2541b1e9b5ca44578e7"
        },
        {
            "path": "Dispatch\/sendcommand.cpp",
            "mode": "100644",
            "type": "blob",
            "sha": "eb526ee29aa1d919384623a49b6658911f48ddf0",
            "size": 1605,
            "url": "https:\/\/api.github.com\/repos\/sametersoylu\/charged\/git\/blobs\/eb526ee29aa1d919384623a49b6658911f48ddf0"
        },
        {
            "path": "README.md",
            "mode": "100644",
            "type": "blob",
            "sha": "a7cf8b0db399062fbdc4a99c1816e857e25f82aa",
            "size": 647,
            "url": "https:\/\/api.github.com\/repos\/sametersoylu\/charged\/git\/blobs\/a7cf8b0db399062fbdc4a99c1816e857e25f82aa"
        }
    ],
    "truncated": false
}
 
Son düzenleme:
C# kodunda sen local hostunu baglamiyorsun. Sen localhost'a baglaniyorsun. Belirledigin end pointe baglaniyorsun.

Daha net nasil anlatirim bilmiyorum.
Endpoint /user dedim mesela di mi? API'in sen localhost/user/<user_id> adresine gittiginde atiyorum sana JSON seklinde user datasini veriyor. Ornek olarak localhost/user/123 olsun. Senin serverinda gidiyor, 123 id'li user'in verisi getiriyor ve sana asagidaki gibi (ornek) bir JSON yaniti veriyor;

JSON:
{
    "id": "123",
    "username": "veryImportantUser",
    "name": "John",
    "surname": "Doe",
    "email": "johndoe@example.com",
    "active": true
}

Sen bu end pointe tarayicidan baglandiginda gerceklesen islem buysa, C# uzerinde HttpClient kullanarak, yine bu end point'e baglanabilirsin. Ornegin benim kendi API'm bana GitHub uzerindeki adini verdigim bana ait public repository'nin datasini sunuyor.

Asagidaki kodla GET istegi atiyorum;
C#:
public static async Task<string> ApiResponse(string endPoint) {
    using var client = new HttpClient();

    var response = await client.GetAsync($"{baseUrl}/api/{endPoint}");

    if (response.IsSuccessStatusCode) {
        return await response.Content.ReadAsStringAsync();
    }

    return "";
}

Mesela soyle kullandigimda:
C#:
// Eger async fonksiyonda cagirmiyorsan;
Console.WriteLine(ApiResponse("charged/main/pretty").Result);
// Eger async fonksiyonda cagiriyorsan;
Console.WriteLine(await ApiResponse("charged/main/pretty"));

Verecegi response;
JSON:
{
    "sha": "415f0ef915b2fbbf4be67c6f21eb7a98020b4bcd",
    "url": "https:\/\/api.github.com\/repos\/sametersoylu\/charged\/git\/trees\/415f0ef915b2fbbf4be67c6f21eb7a98020b4bcd",
    "tree": [
        {
            "path": ".gitignore",
            "mode": "100644",
            "type": "blob",
            "sha": "9c4891db9ea9927193807d797d89094d102dd06a",
            "size": 29,
            "url": "https:\/\/api.github.com\/repos\/sametersoylu\/charged\/git\/blobs\/9c4891db9ea9927193807d797d89094d102dd06a"
        },
        {
            "path": "CMakeLists.txt",
            "mode": "100644",
            "type": "blob",
            "sha": "4430da7c3be6e2981f5375b3f4528a3f6b815a8d",
            "size": 250,
            "url": "https:\/\/api.github.com\/repos\/sametersoylu\/charged\/git\/blobs\/4430da7c3be6e2981f5375b3f4528a3f6b815a8d"
        },
        {
            "path": "Daemon",
            "mode": "040000",
            "type": "tree",
            "sha": "e941aa1f9f44185086c9486f5287e181400dcf37",
            "url": "https:\/\/api.github.com\/repos\/sametersoylu\/charged\/git\/trees\/e941aa1f9f44185086c9486f5287e181400dcf37"
        },
        {
            "path": "Daemon\/ChargeCheck.h",
            "mode": "100644",
            "type": "blob",
            "sha": "a6f10ccf9da64a37d0ce1ff6193d8c75f7eca896",
            "size": 3810,
            "url": "https:\/\/api.github.com\/repos\/sametersoylu\/charged\/git\/blobs\/a6f10ccf9da64a37d0ce1ff6193d8c75f7eca896"
        },
        {
            "path": "Daemon\/Fork.h",
            "mode": "100644",
            "type": "blob",
            "sha": "7b9aa7661f24f866a2ae7e34eb62e06e22be9eae",
            "size": 1585,
            "url": "https:\/\/api.github.com\/repos\/sametersoylu\/charged\/git\/blobs\/7b9aa7661f24f866a2ae7e34eb62e06e22be9eae"
        },
        {
            "path": "Daemon\/Functional.h",
            "mode": "100644",
            "type": "blob",
            "sha": "a92d3f497ba7d6d1938567b54124b9a9412b3fb8",
            "size": 1089,
            "url": "https:\/\/api.github.com\/repos\/sametersoylu\/charged\/git\/blobs\/a92d3f497ba7d6d1938567b54124b9a9412b3fb8"
        },
        {
            "path": "Daemon\/main.cpp",
            "mode": "100644",
            "type": "blob",
            "sha": "25cfcc15bc8e9984757cf8bbadf82a9247caaee2",
            "size": 8717,
            "url": "https:\/\/api.github.com\/repos\/sametersoylu\/charged\/git\/blobs\/25cfcc15bc8e9984757cf8bbadf82a9247caaee2"
        },
        {
            "path": "Dispatch",
            "mode": "040000",
            "type": "tree",
            "sha": "b3cee760b9bfb080709bd2541b1e9b5ca44578e7",
            "url": "https:\/\/api.github.com\/repos\/sametersoylu\/charged\/git\/trees\/b3cee760b9bfb080709bd2541b1e9b5ca44578e7"
        },
        {
            "path": "Dispatch\/sendcommand.cpp",
            "mode": "100644",
            "type": "blob",
            "sha": "eb526ee29aa1d919384623a49b6658911f48ddf0",
            "size": 1605,
            "url": "https:\/\/api.github.com\/repos\/sametersoylu\/charged\/git\/blobs\/eb526ee29aa1d919384623a49b6658911f48ddf0"
        },
        {
            "path": "README.md",
            "mode": "100644",
            "type": "blob",
            "sha": "a7cf8b0db399062fbdc4a99c1816e857e25f82aa",
            "size": 647,
            "url": "https:\/\/api.github.com\/repos\/sametersoylu\/charged\/git\/blobs\/a7cf8b0db399062fbdc4a99c1816e857e25f82aa"
        }
    ],
    "truncated": false
}
Şimdi anladım eyvallah. Endpointlerimi burada tekrardan çağırmam gerekiyor.
 
Son düzenleme:

Technopat Haberler

Yeni konular

Geri
Yukarı