HTTP API 업데이트 Refit

사진 Christian WiedigerUnsplash

재조정



Refit เป็น 라이브러리 ทำ ทำ ที่ ให้ ให้ เรา สามารถ เรียก ใช้ ใช้ งาน http api ได้ ผ่าน 인터페이스 ของ c# โดย ที่ เรา ไม่ ต้อง มา มา ประกอบ ประกอบ url/헤더/바디 เอง และ และ เอง ครับ ครับ ครับ ครับ ครับ

가이랏



อันดับ อันดับ อันดับ ก็ แรก แรก Nuget 패키지 ของ 리피트 ก่อน ก่อน ครับ เนื่อง ต้องการ ต้องการ ใช้ แบบ แบบ แบบ httpclientfactory เลย ติดตั้ง ตัว นี้ ตัว เดียว เดียว ก็ ได้ ได้

https://www.nuget.org/packages/Refit.HttpClientFactory/

เพื่อเป็นตัวอย่าง สมติว่าผมจะ เรียก Northwind API โดยมี API 엔드포인트 ที่จะเรียกอยู่ 3 ตัว คือ
GET /api/categoriesGET /api/categories/{categoryId}POST /api/categories
โดย response แлะ 본문 ของ POST เป็น application/json มีรูปแบบประมาณนี้

{
    name: "เครื่องดื่ม",
    description: "ชา กาแฟ น้ำผลไม้ น้ำอัดลม เบียร์ ฯลฯ",
}


จาก api ที่ i มา มา เรา ต้อง แปลง มัน เป็น เป็น 인터페이스 ก่อน ซึ่ง ซึ่ง ก็ จะ จะ คล้ายคลึง กับ การ การ เขียน 메소드 ใน 컨트롤러 ของ asp.net core อยู่ มาก รูปแบบ ก็ จะ ทำนอง ทำนอง นี้ คิด ว่า น่า จะ จับ รูปแบบ รูปแบบ ได้ ได้ ได้ ได้ น่า น่า น่า น่า

public class Category 
{
    public string name { get; set; }
    public string description { get; set; }
}

public interface INorthwindApi
{
    [Get("/api/categories"]
    Task<List<Category>> GetCategoriesAsync();

    [Get("/api/categories/{categoryId}"]
    Task<Category> GetCategoryAsync(int categoryId);    

    [Post("/api/categories")]
    Task AddCategoryAsync(Category newCategory);
}


( การเขียน 인터페이스 จะต้อง ใช้ 메서드 ที่ 반환 Task หรือ Task<T> เสมอครับ เพราะ Refit ไม่รองราhorบ กียาียน API에 대한 동기화

ถ้า ถ้า ถ้า จาก 인터페이스 นี้ นี้ เรา จะ เห็น ว่า ว่า ถ้า เรา มี มี มี มี มี มี นี้ นี้ นี้ และ และ และ และ ตัว ตัว ตัว ตัว ตัว นี่ ที่ ใน ที่ ที่ ที่ นี้ นี้ จะ ใช้ วิธี วิธี วิธี เรียก เรียก ใช้ ผ่าน ผ่าน จึง จึง จึง จึง จึง ครับ ครับ ครับ ครับ ครับ ครับ ครับ ครับ ครับ ใน ใน ใน ใน ใน ที่ ที่ ที่ ที่ จึง จึง จึง จึง จึง จึง จึง จึง จึง จึง ผ่าน ผ่าน ผ่าน ผ่าน ผ่าน ผ่าน ผ่าน ผ่าน ผ่าน ผ่าน ผ่าน ผ่าน ผ่าน ผ่าน ผ่าน ผ่าน ครับ ครับ ครับ ครับ ครับ ครับ ครับ ครับ ครับ ครับ ครับ ครับ ครับ ครับ ครับ ใน ใน ที่ ที่ นี้ นี้ จะ ใช้ วิธี วิธี วิธี วิธี วิธี เรียก เรียก ใช้ ผ่าน ผ่าน ผ่าน ผ่าน ผ่าน ผ่าน ผ่าน ผ่าน ผ่าน ผ่าน ผ่าน ผ่าน di ต้องมีการ 등록 서비스 ก่อน โดยในส่วน ConfigureServices 에서 Startup 클래스

services.AddRefitClient<INorthwindApi>()
        .ConfigureHttpClient(
            c => c.BaseAddress = new Uri("https://northwind.now.sh/")
        );


แค่นี้ เราก็จะมี 서비스 INorthwindApi ที่สามารถ 주입 ไปใช้ใน 컨트롤러 ได้แล้วครับ เช่น เราสามารถสร้าง 컨트롤러 ประมาณนี้ได้

[Route("api/categories"]
public class NorthwindCategoryController : ControllerBase
{
    private readonly INorthwindApi _api;
    public NorthwindCategoryController(INorthwindApi api) 
    {
        _api = api;
    }

    [HttpGet]
    public Task<List<Category>> GetCategoriesAsync() 
        => _api.GetCategoriesAsync();

    [HttpGet("{categoryId}"]
    Task<Category> GetCategoryAsync(int categoryId) 
        => _api.GetCategoryAsync();

    [HttpPost]
    Task AddCategoryAsync(Category newCategory) 
        => _api.AddCategoryAsync(newCategory);
}


จะ จะ จะ ว่า เห็น ใช้ ใช้ recit เรา ก็ ก็ ไม่ ต้อง ต้อง ยุ่งยาก การ การ ใช้ ใช้ ใช้ ใช้ httpclient รวม ถึง ไม่ ต้อง จัด การ การ การ 직렬화/사제화 อะไร เลย เลย เลย เลย

좋은 웹페이지 즐겨찾기