Swift4 Soap ile Web Servis Kullanımı

Web Servisleri HTTP protokolü ile XML gönderip alarak iki uzak cihaz arasındaki iletişimi sağlayan bir haberleşme yöntemidir. XML olması sayesinde değişik platformalar ve programalama dilleri arasında haberleşme sağlanabilir. Web servislerinde veriler XML olarak tutulur ve SOAP kullanılarak bir yerden diğerine taşınır. Web servislerinin yapısı itibariyle farklı platformlarda çalışan uygulamar birbiri ile haberleşebilirler. Daha fazla teorik bilgi için internette arama yapabilirsiniz biz daha çok web servisin nasıl kullanabileceğimize bakacağız.
Bu makalemizde Soap kütüphanesini kullanarak Nüfüs ve Vatandaşlık İşleri Genel Müdürlüğünün sağlamış olduğu web servis üzerinden nasıl kimlik doğrulama işlemlerini gerçekleştirebileceğimize bakacağız. Web servisi ile ilgili işlemlerin yapılacağı siteye buraya tıklayarak göz atabilirsiniz.
Öncelikle Https üzerinden bilgi alış verişi yapabilmemiz için info.plist dosyamızda ayarlama yapmamız gerekiyor. Aşağıdaki gibi info.plist dosyamızı düzenleyelim.
Gerekli kurulumları ve ayarlamaları yaptığımıza göre artık anlatıma geçebiliriz. Main.storyboard dosyamıza gelerek aşağıdaki gibi düzenleyelim.
Kullandığımız web servis isim ve soy isim bilgilerinin bütün harflerini büyük olarak göndermemizi istiyor aksi takdirde uygulamamız çalışmayacaktır aşağıdaki kodların arasında bunun önlemini nasıl alabileceğimizi anlattım. Ayrıca doğum tarihi değil doğum yılı olduğuna dikkat edelim yani 4 haneli bir sayı gitmesi gerekiyor.
ViewController.swift dosyamızı aşağıdaki gibi düzenleyelim.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 |
// // ViewController.swift // SwiftSoapWebServiceTutorial // // // Created by Esat Gözcü on 31.01.2018. // Copyright © 2018 Esat Gözcü. All rights reserved. // import UIKit class ViewController: UIViewController,UITextFieldDelegate,NSURLConnectionDelegate,NSURLConnectionDataDelegate,XMLParserDelegate { var mutableData: NSMutableData = NSMutableData() var currentElementName: String = "" @IBOutlet weak var tcText: UITextField! @IBOutlet weak var nameText: UITextField! @IBOutlet weak var yearText: UITextField! @IBOutlet weak var surnameText: UITextField! override func viewDidLoad() { super.viewDidLoad() } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() } // Test Et butonuna tıklandığında.. @IBAction func button(_ sender: Any) { // İsim ve soyisimin bütün harflerinin büyük olması gerekiyor. // O yüzden uppercased() kullanıyoruz. let tcString = self.tcText.text let nameString = self.nameText.text?.uppercased(with: Locale(identifier: "tr")) let surnameString = self.surnameText.text?.uppercased(with: Locale(identifier: "tr")) let yearString = self.yearText.text // Web servisimizdeki SoapMessage kısmını kopyalayıp kendi verilerimizle birleştiriyoruz. // Eğer Soap 1.2 kısmı kullanılacak ise o kısımdaki SoapMessage kopyalanmalıdır. let soapMessage = "<?xml version='1.0' encoding='utf-8'?><soap:Envelope xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:soap='http://schemas.xmlsoap.org/soap/envelope/'><soap:Body><TCKimlikNoDogrula xmlns='http://tckimlik.nvi.gov.tr/WS'><TCKimlikNo>\(tcString!)</TCKimlikNo><Ad>\(nameString!)</Ad><Soyad>\(surnameString!)</Soyad><DogumYili>\(yearString!)</DogumYili></TCKimlikNoDogrula></soap:Body></soap:Envelope>" // Web servisin URL'si. let urlString = "https://tckimlik.nvi.gov.tr/Service/KPSPublic.asmx" // URL'yi oluşturuyoruz. let url = URL(string:urlString) // URL ile sorgumuzu bağlıyoruz. let theRequest = NSMutableURLRequest(url:url!) // Soap mesajının uzunluğunu hesaplıyoruz. let msLength = soapMessage.count // Web servis sayfasında soapMessage kısmının üstündeki verileri giriyoruz. theRequest.addValue("text/xml; charset=utf-8", forHTTPHeaderField: "Content-Type") theRequest.addValue(String(msLength), forHTTPHeaderField: "Content-Length") theRequest.httpMethod="POST" theRequest.httpBody = soapMessage.data(using: String.Encoding.utf8,allowLossyConversion: false) let connection = NSURLConnection(request: theRequest as URLRequest,delegate:self,startImmediately:true) connection?.start() } func parser(_ parser: XMLParser, foundCharacters string: String) { if currentElementName == "TCKimlikNoDogrulaResult"{ // Dönen sonuç true dönerse.. if string == "true" { // AlertDialog oluşturup bilgi veriyoruz. let alert = UIAlertController(title: "Sonuç", message: "Sisteme Kayıtlı Kullanıcı Bulundu !!", preferredStyle: UIAlertControllerStyle.alert) let okButton = UIAlertAction(title: "OK", style: UIAlertActionStyle.cancel, handler: nil) alert.addAction(okButton) self.present(alert, animated: true, completion: nil) } // Dönen sonuç false dönerse.. else{ // AlertDialog oluşturup bilgi veriyoruz. let alert = UIAlertController(title: "Sonuç", message: "Sisteme Kayıtlı Kullanıcı Bulunamadı !!", preferredStyle: UIAlertControllerStyle.alert) let okButton = UIAlertAction(title: "OK", style: UIAlertActionStyle.cancel, handler: nil) alert.addAction(okButton) self.present(alert, animated: true, completion: nil) } } } // Gerekli fonksiyonlarımızı yazıyoruz.. func connection(_ connection: NSURLConnection, didReceive response: URLResponse) { mutableData = NSMutableData() } func parser(_ parser: XMLParser, didStartElement elementName: String, namespaceURI: String?, qualifiedName qName: String?, attributes attributeDict: [String : String] = [:]) { currentElementName = elementName } func connection(_ connection: NSURLConnection, didFailWithError error: Error) { print("connection error\(error)") } func connection(_ connection: NSURLConnection, didReceive data: Data) { self.mutableData.append(data) } func connectionDidFinishLoading(_ connection: NSURLConnection) { let xmlParser = XMLParser(data: mutableData as Data) xmlParser.delegate = self xmlParser.parse() xmlParser.shouldResolveExternalEntities = true } } |
Böylelikle Soap ile Web Servis işlemlerini nasıl yapabileceğimizi görmüş olduk. Kodlar arasında gerekli açıklamaları yaptım daha iyi anlayabilmek için projenin kaynak kodlarını indirerek alıştırma yapabilirsiniz.
Projenin kaynak kodlarını buraya tıklayarak indirebilirsiniz.