SDKとAPIの違い
C# では、SDK と API はどちらもソフトウェアとアプリケーションを作成するためのツールです。SDK (ソフトウェア開発キット) は、開発者がソフトウェア アプリケーションを作成するのに役立つツールとドキュメントのセットです。API (アプリケーション プログラミング インターフェイス) は、アプリケーションが相互に通信する方法を定義する一連のルール、プロトコル、およびツールです。
SDKとAPIの違い
SDK と API の主な違いは、その機能と目的です。SDK は、開発者がソフトウェア アプリケーションを作成するのに役立つ一連のツールとドキュメントを提供する完全なツールキットです。SDK には多くの API が含まれていますが、それらは SDK の一部にすぎません。API は、アプリケーションが相互に通信する方法を定義するルール、プロトコル、ツールのセットであり、完全なツールキットを提供するものではありません。
もう一つの大きな違いは、使用の難しさです。SDK にはより多くのツールやドキュメントが含まれているため、一般に API よりも使用するのが難しくなります。ただし、開発者がアプリケーションを完全に制御できるため、柔軟性と制御が向上します。
SDK を使用する場合
完全なアプリケーションを作成する必要がある場合は、通常、SDK を選択することをお勧めします。柔軟性と制御性が向上し、アプリケーションを完全に制御できるようになります。さらに、通常はより多くのツールとドキュメントが含まれており、開発がより効率的になります。
API を使用する場合
既存のアプリケーションまたはサービスの特定の機能にのみアクセスする必要がある場合には、API の方が適切な選択肢となることがよくあります。完全なアプリケーションを作成する必要はありません。必要なのは、API を使用して既存のアプリケーションまたはサービスと対話することだけです。
コード例
SDK と API を使用した例を次に示します。
SDKを使用した例
using System;
using Microsoft.Azure.CognitiveServices.Vision.ComputerVision;
using Microsoft.Azure.CognitiveServices.Vision.ComputerVision.Models;
namespace SDKExample
{
class Program
{
static void Main(string[] args)
{
string subscriptionKey = "your-subscription-key";
string endpoint = "your-endpoint";
ComputerVisionClient client = new ComputerVisionClient(new ApiKeyServiceClientCredentials(subscriptionKey)) { Endpoint = endpoint };
var result = client.RecognizeTextAsync("<https://example.com/image.jpg>").Result;
foreach (var region in result.Regions)
{
foreach (var line in region.Lines)
{
foreach (var word in line.Words)
{
Console.Write(word.Text + " ");
}
Console.WriteLine();
}
}
}
}
}
APIの使用例
using System;
using System.Net.Http;
using System.Threading.Tasks;
namespace APIExample
{
class Program
{
static async Task Main(string[] args)
{
string subscriptionKey = "your-subscription-key";
string endpoint = "your-endpoint";
string url = "<https://example.com/image.jpg>";
HttpClient client = new HttpClient();
client.DefaultRequestHeaders.Add("Ocp-Apim-Subscription-Key", subscriptionKey);
var response = await client.GetAsync($"{endpoint}/vision/v3.0/read/analyze?mode=Printed");
var operationLocation = response.Headers.GetValues("Operation-Location").FirstOrDefault();
var result = await GetReadResult(operationLocation, client);
foreach (var line in result.RecognitionResult.Lines)
{
foreach (var word in line.Words)
{
Console.Write(word.Text + " ");
}
Console.WriteLine();
}
}
static async Task<ReadOperationResult> GetReadResult(string operationLocation, HttpClient client)
{
ReadOperationResult result = null;
do
{
var response = await client.GetAsync(operationLocation);
result = await response.Content.ReadAsAsync<ReadOperationResult>();
await Task.Delay(1000);
} while (result.Status == OperationStatusCodes.Running || result.Status == OperationStatusCodes.NotStarted);
return result;
}
}
class ReadOperationResult
{
public string Status { get; set; }
public RecognitionResult RecognitionResult { get; set; }
}
class RecognitionResult
{
public Line[] Lines { get; set; }
}
class Line
{
public Word[] Words { get; set; }
}
class Word
{
public string Text { get; set; }
}
}