สวัสดีครับเนื่องจากเล่นเกมส์จนเบื่อแล้ว ติดเคอร์ฟิว จะซิ่งไปบางแสน นั่งร้านกาแฟก็ไม่ได้

วันนี้ผมจะมาสอนใช้ RestSharp แบบคร่าว ๆ GET POST ธรรมดา ๆ
แต่ไม่สอน PUT UPDATE DELETE ถ้าทำ GET POST ได้แล้วพวกนั้นไม่ยากหรอก ฮ่า ๆ

โดย Project ที่เราจะนำมาเป็นตัวอย่างนั้นเป็น ASP.NET Core API 3.1

เรามาดูกันดีกว่าเราต้องใช้ Package ไหนใน Project เราบ้าง

  1. RestSharp
  2. หัวใจ ❤

การติดตั้งก็ไม่ยากเรามีให้ 2 วิธีสำหรับ CLI และ NuGet Package บน Visual Studio

dotnet add package RestSharp

สำหรับ Visual Studio 2019

และ API ที่เราใช้ในการสอนเราใช้ของ restapiexample

dummy.restapiexample.com

มาดู appsettings.json ของเรากันดีกว่ามีอะไรมั้ง

{
  "DummyAPI": {
    "BaseUrl": "https://dummy.restapiexample.com",
    "GetAll": "/api/v1/employees",
    "GetById": "/api/v1/employee/{Id}",
    "Create": "/api/v1/create",
    "Update": "/api/v1/update/{Id}",
    "Delete": "/api/v1/delete/{Id}"
  },
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft": "Warning",
      "Microsoft.Hosting.Lifetime": "Information"
    }
  }
}

จะเห็นว่าผมใส่ setting url ไว้ใน appsetting ทั้งหมดซึ่งถ้าเป็น api หรือ key ที่ sensetive ก็ควรใช้ enivonment variables แทนนะ

มาเริ่มกันเลยดีกว่า

ดู EmployeeControllerเราก่อนดีกว่าว่าเตรียมอะไรไว้บ้าง

จาก Code ข้างบนเราจะเห็นว่าผมได้สร้าง Constructor ขึ้นมารับ IConfiguration
ซึ่ง ASP.NET Core ได้ทำ Dependency Injection อัตโนมัติ ไม่ต้องทำ Unity Container เหมือน ASP.NET MVC 4 ว้าวเลยใช่ไหมละ แต่เราจะไม่ได้มาสอนเรื่องนี้ เอาละไปต่อ

เริ่มต้นที่ HTTP GET

API GET ผมจะเรียก http://dummy.restapiexample.com/api/v1/employee/1
ส่วน Response ที่ Return มาก็ข้างล่างนี้เลย

{
    "status": "success",
    "data": {
        "id": "1",
        "employee_name": "Tiger Nixon",
        "employee_salary": "320800",
        "employee_age": "61",
        "profile_image": ""
    }
}

API GET Response

และ Class ที่เราเขียนมารับ Reponse Json ข้างบน

ทำไมถึงแยกมา 2 ไฟล์ก็เพราะมันมี API 2 ตัวที่ใช้ Propety เหมือนกันนะสิแต่ในโพสนี้ผมข้อยกตัวอย่าง API GET มาตัวเดียวละกันครับกลัวมันจะซ้ำซ้อนและยาวไปเพราะไม่ต่างกันมาก

และตัว API GET ที่ผมดันมีแต่ Route Parameter แต่ก็มีตัวอย่าง Query String Parameter ให้นะ

เห็นไหมครับไม่ยากเลยแถมแปลงเป็น Object ให้อีกตั้งหากกรณี Property กับ Json Property ตรงกันก็ไม่ต้องเขียน Attribute [JsonProperty] ก็ได้นะ
จะเห็นได้ว่า Code ค่อนข้างง่ายเลยใช่ไหมครับ

ส่วน Result จาก HTTP GET https://localhost:5001/api/Employee/1

{
    "status": "success",
    "data": {
        "id": 1,
        "employeeName": "Tiger Nixon",
        "employeeSalary": 320800,
        "employeeAge": 61,
        "profileImage": ""
    }
}

Response ที่เราได้จาก restapiexample

มาต่อกันที่ HTTP POST

API POST ผมจะเรียก http://dummy.restapiexample.com/api/v1/create
ส่วน Request และ Response ก็ข้างล่างเลย

{
  "name": "Kob Taevon",
  "salary": 9000,
  "age": 30
}

POST Request ที่ไปหา restapiexample

{
    "status": "success",
    "data": {
        "name": "Kob Taevon",
        "salary": 9000,
        "age": 30,
        "id": 62
    }
}

POST Response จาก restapiexample

มาดู Model ที่เราทำเป็นตัวอย่างในการ Post ดีกว่า

Class ที่เขียนมาเพื่อนำ Responnse ไปใช้ต่อ

และตัวอย่าง Code ในการ POST ไป restapiexample

จะเห็นได้ว่ามี 2-3 วิธีหากเจอ API POST ที่รับ Format แตกต่างกัน
อย่าง application/x-www-form-urlencoded และ application/json
ส่วนใหญ่ก็จะเจอแค่ 2 อย่างนี้หรืออาจจะมีกรณีใน code ข้างต้นที่กล่าวไป
อาจจะเจอ Property อย่าง ProductId แต่เจ้ากรรม API ดันรับเป็น product_id
จะเขียน Property product_id ใน C# ก็จะดูแปลก ๆ ถ้า Standard Code ของบริษัทเราใช้ไม่เหมือนกัน API ผมเลยยกตัวอย่าง JsonProperty ขึ้นมาใน Code ข้างบน

ตัวอย่างการเรียก https://localhost:5001/api/Employee/1

ก็จบไปแล้วกับบทความ Restsharp ซึ่งก็ไม่รู้จะอธิบายยังไงออกมาให้ดีที่สุด
เพราะเป็นคนที่มีสกิลการสอนแย่มาก ๆ บางทีรู้ว่าเขียนยังไงออกมาทำงานยังไง
แต่ก็อธิบายออกมาให้คนอื่นรู้เรื่องด้วยไม่ได้ ก็จะทุลักทุเลหน่อยในแต่ละบทความ
หวังว่าเขียนไปเรื่อย ๆ ก็อาจจะอธิบายคนอื่นได้เก่งขึ้น

ไม่รู้จะอธิบายยังไง

Github : AspNetCoreRestsharpExample

Referrence :