Arkadaşlar Rest mimarisine fazla girmeyeceğim. Veri iletişimini HTTP protokolü ile yapar. HTTP metotlarını kullanır. Veri almak için GET, veri eklemek için POST, veri güncellemek için PUT ve veri silmek için DELETE HTTP'nin metodunu kullanır. Yani requset ve response mantığına dayanır. Rest response(İstek cevabı) xml, json veya text formatlarında olabilir. JSON formatının parse edilmesinin kolay olması ve veri boyutunun hafif olması nedeniyle bu uygulamada JSON formatı kullanılmıştır. JSON format web servislere yaygın olarak kullanılmaktadır.
Web servisi, uygulamalar veya sistemler arasında veri alışverişinde kullanılan açık protokol ve standartlara denir. Rest mimarisini kullanan servislere Restful service denilmektedir.
Restful servis oluştururken; veri çekme, veri ekleme, veri güncelleme ve veri silme metotları(GET, POST, PUT, DELETE) için bir yönlendirmeyle (route) ve response üretecek bir fonksiyonun yazılmasıyla gerçekleşir. Arkadaşlar bu uygulamada sadece HTTP GET metodu kullanılmıştır. Diğer metotları get metodunu anladıktan sonra kolaylıkla oluşturabilirsiniz.
LARAVEL FRAMEWORK RESTful SERVİS OLUŞTURMA
1. Route Oluşturma: Rotanıza resource metodunu yazarsanız Laravel sizler için get, post, put ve delete rotları oluşturur. Yazılım güncelleme kontrolüm (MVC deki C) bir namespace içinde olduğu için ve belki ilerde başka fonksiyon ve web servisler yazarım diye aşağıda görüldüğü gibi rotayı Route grubu içine koydum.
// Web Sevices Routes
Route::group(['prefix'=>'webservices','namespace'=>'webservices'],function()
{
Route::resource('softwareupdate', 'SoftwareUpdateController');
});
Url'nin sonunda softwareupdate yazdığımızda bütün kayıtlar, softwareupdate/{id} yazdığımızda ise id yerine yazdığımız değer ile eşleşen kayıt döndürülecektir.
2. Controller Oluşturma: Laravel frameworkte controller oluşturmak için çalıştırdan cmd komutu ile ms-dos konsolunu açın ve resindeki komutları uygulayın. Ben kontrolü webservices dizini altında oluşturdum sizler istediğiniz yerde oluşturabilirsiniz. Laravel framework kullanıyorsanız muhtemelen composer bilgisayarınıza kurmuşsunuzdur.
SoftwareUpdateCotroller kontrolün kodlarına gelince açıklamalarıyla birlikte aşağıdadır.
// $softwares yazılımlarımızın dizisi
private $softwares;
public function __construct()
{
// Yazılımlarımızın dizisi oluştur
$this->softwares=[
'software'=>[
[
'id'=>'tiventisay',
'description'=>'Tiventi Site ve Apartman Yonetimi',
'version'=>'0.0.0.2',
'update'=>'2017-10-16',
'download'=>'http://www.tiventi.com/software/download/tiventi-site-ve-apartman-yonetimi'
],
[
'id'=>'tiventist',
'description'=>'Tiventi Sinav Takibi',
'version'=>'0.0.0.2',
'update'=>'2017-10-16',
'download'=>'http://www.tiventi.com/software/download/tiventi-sinav-takibi'
],
[
'id'=>'tiventites',
'description'=>'Tiventi Teknik Servis',
'version'=>'1.0.0.2',
'update'=>'2017-10-16',
'download'=>'http://www.tiventi.com/software/download/tiventi-teknik-servis'
]
],
'error'=>'Bilgiler okunmadi!'
];
}
// Bütün yazılımların listesi
public function index()
{
// Listeyi json formatta döndür.
return response()->json($this->softwares);
}
// Belirli bir yazılımın bilgisini alma
public function show($id)
{
$software;
// Dizide yazılımın bulunması
foreach ($this->softwares['software'] as $key => $value)
{
if($id==$value['id'])
{
$software=$value;
break;
}
}
// Bulunan yazılımı json formatta döndür.
return response()->json($software);
}
Aşağıdaki resimlerde de girdiğimiz url ye göre aldığımız JSON format response leri göreceksiniz.
Arkadaşlar iki adımda RESTful web servisini oluşturduk. Şimdi bu web servisini C# tarafından çağırıp bilgilerini okumaya geldi. Tahmin edeceğiniz gibi C# tarafında bir url ile yukarıdaki resimlerdeki JSON formatında veri ürettikten sonra JSON veriyi parse edip veriyi kullanmak kalıyor.
C# İLE RESTful Web Service Çağırmak
1. Windows Form Uygulaması Projesini Oluşturmak: Uygulamamız CheckSoftwareUpdate adında Windows Form Uygulaması olarak oluşturuldu. MainForm adında uygulama çalıştığında ilk gösterilecek form oluşturuldu. Daha sonra verinin Model sınıfının olduğu Software.cs adında bir dosya oluşturuldu. Son olarak JSON formatındaki verileri parse etmemizi sağlayan ve hızlandıran JSON.NET kütüphanesini referanslara ekledik. Kendinizde JSON verisini parse edebilirsiniz ama çok zahmetli bir iş ve verileriniz karmaşıklaştıkça içinden çıkmazsınız. C# tarafındaki dizin resmi aşağıdaki gibidir.
2. Veri Modelimiz: Bu modelin oluşturulması get yapılan verinin tutarlılığı ve diğer HTTP metotları için veri modeli avantaj sağlayacaktır. Model kodu aşağıdadır.
using System;
using System.Collections.Generic;
namespace CheckSoftwareUpdate
{
public class Software
{
public string Id { get; set; }
public string description { get; set; }
public string version { get; set; }
public string update { get; set; }
public string download { get; set; }
}
public class Softwares
{
public List<Software> software { get; set; }
public string error { get; set; }
}
}
3. Verinin Alınması ve Diğer İşlemler: C# RESTful web servis çağırmak daha doğrusu HTTP metotlarını işlemek için bir çok yöntem vardır. Hazır kütüphanelerde mevcut. Restsharp gibi. Ama .Net içinde olan HttpClient bu uygulama için yeterli ve hızlıdır. Kod ile birlikle açıklamalar mevcuttur. Son olarak form resmi eklenmiştir.
using System.Windows.Forms;
using Newtonsoft.Json;
using System.Net.Http;
using System.Net.Http.Headers;
namespace CheckSoftwareUpdate
{
public partial class MainForm : Form
{
// Kurulu yazılımın sürüm bilgilerinin tutulacağı nesne; Gerçekte bu bilgi bir config dosyayından veya veritabanından alınmalıdır.
Software swk =new Software();
// Güncel yazılımın sürüm bilgilerinin tutulacağı nesne
Software sw;
// Bütün yazılımların tutulacağı nesne
Softwares sws;
public MainForm()
{
swk.Id = "tiventist";
swk.description = "Tiventi Sınav Takibi";
swk.version = "0.0.0.1";
swk.update = "2017-09-12";
InitializeComponent();
}
private void MainForm_Load(object sender, EventArgs e)
{
// Temel url
string url = "http://localhost/tiventi/public/webservices/softwareupdate";
// GET fonksiyonu bir yazılımın bilgilerini alacağı için id="tiventist" veya swk.id
string id = "tiventist";
// GET fonksiyonu sadece bir yazılımın bilgisini döndereceği için JSON dönüşümünü Software nesnesine atandı.
sw = JsonConvert.DeserializeObject<Software>(GET(url, id));
// Bilgilerin formda gösterilmesi
// Güncel yazılımın bilgileri
lbName.Text += sw.Id;
lbDescription.Text += sw.description;
lbVersion.Text += sw.version;
lbUpdate.Text += sw.update;
linkDownload.Text = sw.download;
// Kurulu yazılım bilgileri
lbDescription2.Text += swk.description;
lbVersion2.Text += swk.version;
lbUpdate2.Text += swk.update;
// Kurulu ve Güncel sürüm aynı mı?
if (swk.version == sw.update)
{
btnUpdate.Enabled = false;
lbStatus.Text = "Yazılım güncel.";
}
else
{
lbStatus.Text = "Yazılım güncel değil!";
btnUpdate.Enabled = true;
}
// Bütün yazılımların listesi
sws = JsonConvert.DeserializeObject<Softwares>(GET(url));
Console.WriteLine(sws.software.Count);
//MessageBox.Show(sws.software.ToList().Count.ToString());
foreach (var item in sws.software)
{
lbSoftwares.Items.Add(item.description);
}
}
// GET Metodu --> string türünden JSON verisi döndürür. HttpClient
public string GET(string url, string id = "")
{
// Yazılımlardan birini veya hepsini alma seçeneği
if (id != "")
url = url +"/"+ id;
using (var httpClient = new HttpClient())
{
// JSON formata olacağını belirlemek
httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
HttpResponseMessage response = httpClient.GetAsync(new Uri(url)).Result;
if (response.IsSuccessStatusCode)
{
return response.Content.ReadAsStringAsync().Result;
}
else
return string.Empty;
}
}
// Kurulu ve güncel sürümleri karşılaştırıp eşit değilse kullanıcı indirme bağlantısını açabilsin.
private void btnUpdate_Click(object sender, EventArgs e)
{
// İndirme bağlantısına gidilicek ve yazılım indirilecektir.
}
}
Umarım yardımcı olacaktır. Uzun bir aradan sonra bir şeyler paylaşmak güzeldi.






Hiç yorum yok:
Yorum Gönder