Giriş yapmadınız.

#1 30.12.2012 01:21:00

Echo
Üye
Kayıtlı: 30.12.2012
Mesajlar: 51
Website

Restful API

Merhabalar,

Şuan Laravel ile orta çapta bir proje geliştiriyorum. Ve projede RESTFUL API kullanıyorum. JS Framework tarafında AngularJS kullanıyorum. Bir noktada takıldım yardımlarınızı bekliyorum.
2 farklı Controller kullanıyorum biri Pages diğeri ise Api. Yetkilendirme içinse Laravel'in içindeki mevcut Auth sınıfını kullanıyorum.

class Pages_Controller extends Base_Controller 
{
    public function __construct() {
        $this->filter('before', 'auth');
    }

   public function get_records() {
      return View::make('pages.records');
   }

}
class Api_Controller extends Base_Controller 
{  
    public $restful = true;
    
    public function __construct() {
        $this->filter('before', 'auth');
    }

   public function get_records() {
      // ...
   }

}

Ben Records View'ini görüntülerken /api/records 'deki verileri çekip View'e göndermek istiyorum. Ama verileri bir türlü çekemedim. Ya Authentication ya da başka bir sorun çıktı. Yardımlarınızı bekliyorum. API'dan gelen verileri çekmek için CURL yerine Laravel HTTPFUL kullandım o zamanda verilerin alınması çok yavaşladı. Bana kullanabileceğim bi Best Practice gösterebilecek var mı ?

Son düzenleyen Echo (30.12.2012 01:21:57)

Çevrimdışı

#2 30.12.2012 01:43:54

Çevrimdışı

#3 30.12.2012 01:51:56

Echo
Üye
Kayıtlı: 30.12.2012
Mesajlar: 51
Website

Yanıt: Restful API

Peki API Controller'ından gelen veriye nasıl erişebilirim ?

Çevrimdışı

#4 30.12.2012 01:56:56

sineld
Yönetici
Yer: Bursa
Kayıtlı: 26.12.2012
Mesajlar: 1,439
Website

Çevrimdışı

#5 30.12.2012 02:12:17

Echo
Üye
Kayıtlı: 30.12.2012
Mesajlar: 51
Website

Yanıt: Restful API

Benim kafa başka yerlere gitmiş pardon smile Bu arada işe yarayacak gibi ama tam anlayamadım. Öncellikle ben böyle çağırmak istersem GET,POST,PUT isteklerini nasıl yapabilirim? Ayrıca parametre gönderirken aşağıdaki yöntemi denedim olmadı gibi geldi bana.

 $user = Controller::call('[email protected]', array($id)); 

Çevrimdışı

#6 30.12.2012 02:18:26

sineld
Yönetici
Yer: Bursa
Kayıtlı: 26.12.2012
Mesajlar: 1,439
Website

Yanıt: Restful API

	$user = User::where_username($username)->first();
	Controller::call('[email protected]', array('username' => $user->username));

parametrenin ismini de göndermek gerekiyor.

Ben bu şekilde hep get olarak kullandım, put ve post'u soracağım, cevabı alınca yazarım.

Çevrimdışı

#7 30.12.2012 02:31:15

Echo
Üye
Kayıtlı: 30.12.2012
Mesajlar: 51
Website

Yanıt: Restful API

Teşekkür ederim cevabınızı bekliyorum. Bu arada parametre ismini göndermek gerekmiyormuş yukarıda gösterdiğim örnek çalışıyor. wink

Çevrimdışı

#8 30.12.2012 02:48:53

sineld
Yönetici
Yer: Bursa
Kayıtlı: 26.12.2012
Mesajlar: 1,439
Website

Çevrimdışı

#9 25.03.2014 16:09:30

serhatsabuncu
Üye
Yer: Estonya
Kayıtlı: 07.03.2014
Mesajlar: 48
Website

Yanıt: Restful API

Bu RESTful ile ilgili benimde bir sorunum var. Projemde herşey tıkır tıkır çalışıyor. Ancak ben kullanıcının yetkisi olsun olmasın önemli değil. Manuel olarak o verilere erişemezsin istiyorum. Nasıl yapabilirim?
Mesela example.com/api/customers ile bir RESTful var. Buna browser'da kendisi yazdığı zaman göremesin hiçbir şey.

Çevrimdışı

#10 25.03.2014 20:26:52

cemdemir
Üye
Yer: Demir
Kayıtlı: 26.08.2013
Mesajlar: 80
Website

Yanıt: Restful API

serhatsabuncu yazdı:

Bu RESTful ile ilgili benimde bir sorunum var. Projemde herşey tıkır tıkır çalışıyor. Ancak ben kullanıcının yetkisi olsun olmasın önemli değil. Manuel olarak o verilere erişemezsin istiyorum. Nasıl yapabilirim?
Mesela example.com/api/customers ile bir RESTful var. Buna browser'da kendisi yazdığı zaman göremesin hiçbir şey.

Aklıma gelen ilk yöntem, Apache'yi kapatmak. Apache servisini kapatırsanız, API'ye tarayıcı ile erişimi engellemiş olursunuz.

Bir diğer yöntem; Oluşturacağınız API, Sadece POST metoduyla gelen istekleri kabul etsin. Dolayısıyla direk gelenleri, bir diğer deyişle GET metoduyla gelenleri elesin.

Bahsettiğim yöntemler, bana çok etkin yöntemlermiş gibi gelmedi. Ben de daha etkin yöntemleri merak ediyorum. smile

Çevrimdışı

#11 25.03.2014 21:50:10

sergin
Üye
Kayıtlı: 17.07.2013
Mesajlar: 130
Website

Yanıt: Restful API

@serhatsabuncu, eğer API'ye istekleri ajaxla yapılsın, browserden direkt yapıldığında çalışmasın anlıyorum. İsteğin ajax olup olmadığını kontrol edip ona göre cevap oluşturabilirsiniz.

// ilgili kontroller metodunda
if (Request::ajax())
{
    //Ajaxla istek yapıldı ise yapılacak işlem
}
else
{
return "Doğrudan tarayıcıdan çağıramazsın";
}

Bu kontrolü  bir before filtresi tanımlayıp orada da yapabilirsin.

Çevrimdışı

#12 25.03.2014 22:57:00

serhatsabuncu
Üye
Yer: Estonya
Kayıtlı: 07.03.2014
Mesajlar: 48
Website

Yanıt: Restful API

Cevaplarınız için teşekkür ederim. Ama şöyle bir durum var.
Jquery ile verileri alıyorsanız mesela Datatables'in sAjaxSource'üne istediğin tipini belirtemeyiz ki.
Aklıma ilk gelen formül sayfanın en başına referer kontrolü yaptırmak. Benim araştırdığım ve kullanmak istediğim Laravel için oturmuş bir yapısı var mıdır?

Çevrimdışı

#13 26.03.2014 00:42:42

sergin
Üye
Kayıtlı: 17.07.2013
Mesajlar: 130
Website

Yanıt: Restful API

Ajax ile veri alsın diyorsan bunun oturmuş yapısı böyle. Controllerde veya before filtesinde istek ajax mı diye kontrol edilir ve ona göre cevap döndürülür.

Çevrimdışı

#14 27.03.2014 00:20:59

selahattinunlu
Üye
Kayıtlı: 17.11.2013
Mesajlar: 67

Yanıt: Restful API

Bu konuyu ben de çok merak ediyorum. Yani gerçekten doğru yol nedir diye. Sanırım bir şifre oluşturmak gerekiyor. belli bir sürelik. O şifre ile gelen istek eğer süresi dolmamışsa geçerli olup yanıt döndürülecek ama süresi dolmuşsa geçersiz sayılacak.

---
Edit:
Ya da tek kullanımlık bi şifre.
---

Anlatabildim mi ben de emin değilim aslında big_smile

Doğru yolu bilen varsa paylaşırsa seviniriz smile)

Son düzenleyen selahattinunlu (27.03.2014 00:21:56)

Çevrimdışı

#15 27.03.2014 06:58:40

xsearch
Üye
Yer: İzmir
Kayıtlı: 30.01.2014
Mesajlar: 222
Website

Yanıt: Restful API

Browserden elle girdiğinde görmesin istiyorsanız get yerine post kullanın.

Çevrimdışı

#16 27.03.2014 09:54:32

sergin
Üye
Kayıtlı: 17.07.2013
Mesajlar: 130
Website

Yanıt: Restful API

Bir kere daha ifade edeyim, ajax kullanıyorsanız isteğin ajax olup olmadığını kontrol edebilirsiniz, xsearch'in söylediğine de katılıyorum. Şuraya bakınız: http://laravel.gen.tr/docs/requests#request-information

Çevrimdışı

#17 27.03.2014 10:05:01

serhatsabuncu
Üye
Yer: Estonya
Kayıtlı: 07.03.2014
Mesajlar: 48
Website

Yanıt: Restful API

sergin yazdı:

@serhatsabuncu, eğer API'ye istekleri ajaxla yapılsın, browserden direkt yapıldığında çalışmasın anlıyorum. İsteğin ajax olup olmadığını kontrol edip ona göre cevap oluşturabilirsiniz.

// ilgili kontroller metodunda
if (Request::ajax())
{
    //Ajaxla istek yapıldı ise yapılacak işlem
}
else
{
return "Doğrudan tarayıcıdan çağıramazsın";
}

Bu kontrolü  bir before filtresi tanımlayıp orada da yapabilirsin.

@sergin çok teşekkür ederim. Bu söylediğini denedim tam istediğim gibi.

if(Request::ajax())
{
    //kodlar buraya
}
else
{
    //Eğer kullanıcı elle buraya ulaşmaya çalışmışsa kullanıcıyı ana ekrana yönlendir
    return Redirect::intended('dashboard');
}

Son düzenleyen serhatsabuncu (27.03.2014 10:05:54)

Çevrimdışı

Forum alt kısmı