REST API nasıl yazılır?


82

Hobi projesi olarak bir iPhone uygulaması yazıyorum ve ona veri sağlamak için bir web hizmetine ihtiyacı olacak. İş yerinde yaptığımdan çok da farklı değil, ama işte sadece görüş ve denetleyiciler yazıyorum. Modeli yazmaktan başkası sorumludur ve genellikle müşteriler web hizmetini sağlar.

Daha önce, herkes MySQL ve PHP kullanırken biraz web programlama yaptım, bu yüzden becerilerim biraz modası geçmiş, ancak zaten bildiğim teknikleri kullanarak bunu yapabileceğime eminim. Ancak, eski araçları kullanarak zamanımı boşa harcamak istemiyorum. En son teknolojinin bir REST API yazmak olacağını anladım. Bir model tanımladığınız anda size CRUD işlevselliğine sahip bir REST API'si veren oldukça iyi çerçeveler olması gerektiğini düşünüyordum.

Sanırım sorum şu: Bir REST API'yi kurup çalıştırmanın en hızlı yolu nedir? Gerçekten sadece iPhone uygulamasını yazmaya odaklanmak ve bu API için çok fazla zaman harcamamak istiyorum. Web yönetimi ve revizyon geçmişini de alabilirsem harika olur. Ayrıca, API'nin herkese açık olmaması gerektiğini de eklemeliyim, bu nedenle kimlik doğrulama desteği de harika olurdu.

Açık olmak gerekirse. Bir PHP çerçevesine aldırmam. Aslında, mevcut hosting hizmetimin desteklediğini bildiğim için muhtemelen daha iyi olabilir.


1
DİNLENME gerçekten ne istediğini muhtemelen değil: medium.com/@trevorhreed/...
Trevor

2
Yazdığım bu 66 satırlık PHP betiğini kullanabilirsiniz .
mevdschee

5 yıl sonra
cevaplandı

Yanıtlar:


42

DÜZENLE:

Görünüşe göre 3 yıl boyunca iyi olan aşağıdaki bağlantılar artık çalışmıyor, bu yüzden gittim ve bir süre takılacağını düşündüğüm birkaç yeni öğretici buldum. Bunlar, çok saygın bir ios geliştirme eğitim sitesi olan Ray Wenderlich sitesinde. İlk makale aslında aşağıdaki bozuk bağlantılara atıfta bulunuyor ancak kendi içinde tamamlandı:

Bir iOS Uygulaması İçin Basit Bir PHP / MySQL Web Hizmeti Nasıl Yazılır

ve ikincisinin biraz bükümü var. Arka uçta parse.com ve AFNetworking kullandı. Her ikisi de oldukça mükemmel.

Çekirdek Veriler Bir Web Hizmetiyle Nasıl Eşitlenir - Bölüm 1


Makinenin geri dönüş yolunda makaleleri bularak aşağıdaki bozuk bağlantıları düzelttim. İnsanlar bağlantıları seviyor gibi görünüyor, bu yüzden onları koruyacağım. Yukarıdaki bağlantılar düşünce için daha fazla yiyecek sağlamalıdır.


İPhone uygulamamla tamamen aynı şeyi yapıyorum. PHP'de RESTful API oluşturmayla ilgili bu makaleyi buldum:

https://web.archive.org/web/20130910164802/http://www.gen-x-design.com/archives/create-a-rest-api-with-php/

ve burada bir takip makalesi de var:

https://web.archive.org/web/20130323001500/http://www.gen-x-design.com/archives/making-restful-requests-in-php/

makalenin altında kaynak koda bir bağlantı ile.


2
Bu bağlantılar artık zaman aşımına uğruyor gibi görünüyor. Bu başka biri için oluyorsa emin değilim. : /
Augie Gardner

8

ZEND Framework'te Zend_Rest_Controller'ı kullanarak bir REST API programladım , iPhone'da ASIHTTPRequest'i kullandım . Her ikisiyle de deneyimim iyi. Başlangıçta ZEND'i kurmakta ve mySQL'e bağlamakta biraz sorun yaşadım, ancak nasıl yapılacağını anladığımda API'yi çok hızlı yazabildim. Başka sorunuz olursa sizinle daha fazla bilgi paylaşabilirim.

DÜZENLEME: üzerinde resmi bir belge yok gibi görünüyor Zend_Rest_Controller. Bu bağlantı , API'nizi oluşturmak için onu nasıl kullanacağınızı açıklar. init()Alt sınıfınızın içinde oluşturmayı devre dışı bırakmanız ve her REST çağrısı için yöntemleri uygulamanız yeterlidir .


Zend sitesinde herhangi bir ZEND_Rest_Controller görmüyorum. ZEND_Rest_Server görüyorum. Bahsettiğin bu mu?
Dmitri

2
Zend_rest_controller'ın nasıl kullanılacağına dair iyi bir başlangıç ​​için buraya bir göz atın: techchorus.net/create-restful-applications-using-zend-framework. Bu sınıfla bir dinlenme api'si oluşturmak zahmetsizdir
Philipp

Bu aşağı yukarı tam olarak ihtiyacım olan şey gibi görünüyor. Deneyeceğim ve başarılı olursam bunu cevabım olarak kabul edeceğim. Teşekkürler.
Erik B

4
Sanırım başarılı olamadı ...: D
user151841

8

Sadece bilmeniz için:

Ruby on Rails'i kullanmayı bıraktım.

DÜZENLEME: Bu yanıt, Ruby on Rails'i seçmenin arkasındaki sebebi sağlamadığı ve bununla bir REST API'nin nasıl yazılacağına dair talimat olmadığı için geri oy verildiğinden, size motivasyonumu ve bazı basit talimatları vereceğimi düşündüm.

Ruby on Rails hakkında bir kitap okumaya başladım ve tek yapmam gereken iskele kullanmak olduğunu fark ettim ve ücretsiz bir JSON REST API aldım.

İşte başlamanız için iyi bir kılavuz: http://guides.rubyonrails.org/getting_started.html

Ruby on Rails ortamınız hazır ve çalışır durumda olduğunda, REST API'nizi oluşturmak çalıştırmaktan daha zor değildir:

$ rails generate scaffold Post name:string title:string content:text

(Yukarıdaki bağlantıdan örnek.) Ayrıca, Rails'in heroku'ya dağıtmanın çok kolay ve ücretsiz olduğunu buldum , bu da çok temel, düşük trafik REST API'm için barındırma ücreti ödemem gerektiği anlamına geliyordu. Ruby on Rails ile çalışmaktan çok mutlu olmamın başka birçok nedeni var, ancak bu, bu sorunun bağlamı dışında.


10
kendinize bir cevap vermek ve sonra ona bir onay işareti vermek kötü form adam ÇOK kötü form.
thenetimp

29
@thenetimp Kendi sorunuzu cevaplamanın kötü bir yanı yoktur. Aslında doğru bir cevap olduğu ve başkası tarafından verilmediği sürece teşvik edilir. Kendi cevabınızı kabul ettiğiniz için herhangi bir itibar kazanmazsınız, bu yüzden buna karşı ne yapabileceğinizi gerçekten anlamıyorum.
Erik B

3
Onu seçmek için
mustafa

4
@Nate REST API yazmak isteyen herkese Ruby on Rails'i öneririm, bu yüzden cevabımı silmeyeceğim. Ancak geri bildiriminizi okudum ve cevabımı güncelledim. Umarım sizi memnun eder.
Erik B

2
@ DennisKrøger soru "REST api nasıl yazılır?" İse sonra "RoR kullandım. İşte iskelelerine başlamak için bir kılavuz" tamamen doğru bir cevap.
Mattygabe

8

PHP ile RESTful API'leri oluşturmak için oldukça basit bir öğreticiyi takip ettim:

Corey Maynard - PHP ile RESTful API Oluşturma

Ana konsept şunları içerir:

  • URI'nin ayrıştırılmasını işleyen ve yanıtı döndüren bir soyut sınıf ve
  • yalnızca API için uç noktalardan oluşan somut bir sınıf.



1

MVC'yi izleyen aşağıdaki PHP sınıfını kontrol edin. http://www.phpclasses.org/package/5080-PHP-Implement-REST-Web-services-servers.html

Bu yardımcı olur umarım.


7
Phpclasses.org'dan herhangi bir şey kullanmanızı kesinlikle önermiyorum. Bu sitedeki birçok sınıf test edilmemiştir, güvensizdir ve senaryo çocukları tarafından yazılmıştır. PEAR veya Zend gibi daha saygın bir yere bakın
Dmitri

13
3000'den fazla PHP geliştiricisi, paketleri PHPClasses sitesine göndermiştir. Bazıları diğerlerinden çok daha yeteneklidir. Hatta birçoğu PEAR ve Zend'e de katkıda bulunuyor. İnsanlara o sitede dağıtılan bir paketi sırf test edilmemiş ve güvensiz olduğunu söylediğiniz paketler bulduğunuz için kullanmamalarını söylemek tamamen önyargıdır. @ Src tarafından tavsiye edilen paket, en yüksek puan alan bir pakettir. Sitede dağıtıldığı için her şeyi genellemeye karar vermeden önce paket koduna veya en azından kullanıcı derecelendirmelerine baksanız daha akıllıca olurdu.
mlemos

0

PHP'yi zaten biliyorsanız, PHP / MySQL arka uçta herhangi bir sorun yoktur. Tüm yanıtları iPhone uyumlu plist xml biçiminde gönderebilir ve bu kısa kod parçacığı ile yanıtı anında bir NSDictionary / NSArray / NSNumber veri yapısına dönüştürebilirsiniz:

NSString *response = [request responseString];
NSData* plistData = [response dataUsingEncoding:NSUTF8StringEncoding];
NSPropertyListFormat format;
NSString *errorStr;
NSDictionary* plist = [NSPropertyListSerialization propertyListFromData:plistData 
                                                       mutabilityOption:NSPropertyListImmutable 
                                                                 format:&format 
                                                       errorDescription:&errorStr];

Ayrıca ASIHTTP paketini URL oluşturmak, eşzamansız istek göndermek ve yanıtları almak için kullanıyorum, kesinlikle tavsiye ederim:

http://allseeing-i.com/ASIHTTPRequest/


0

Web hizmeti için rahat olduğunuz dilleri kullanmalısınız. İsteklere REST yanıtlarını formüle edebilen herhangi bir dil uygundur.

Bununla birlikte, bir şeyi hızlı bir şekilde çalıştırmak istiyorsanız, Google App Engine'de Python kullanmanızı öneririm. Ücretsizdir ve isterseniz Python yerine Java kullanabilirsiniz. App Engine, OpenID ve / veya Google Hesapları kullanarak kimlik doğrulamasını destekler (birbirlerini dışlayıcı olup olmadıklarından emin değildir), böylece kodlamayı kolaylaştırır.

İOS cihaz üzerinden istekte bulunma konusunda ASIHTTPRequest'i kullanmanızı öneririm .


0

Diğer bir seçenek, ultra hafif bir kalıcılık çerçevesi olan restSQL'dir. Bkz http://restsql.org . MySQL ve PostgreSQL'i destekler ve Apache Tomcat gibi standart bir Java EE kapsayıcısında çalışır.

restSQL çok alışılmadık bir veri erişim katmanıdır. restSQL, veritabanının nesneye yönelik bir görünümü değildir. İlişkisel veritabanı tablolarının düz veya hiyerarşik "görünümlerini" sunar. Bu görünümler sorgulanabilir ve basit bir REST tabanlı HTTP veya Java API aracılığıyla güncellenebilir. HTTP arayüzü, onlardan soyutlamak yerine HTTP'nin yerleşik özelliklerini kullanan REST ilkelerine dayanmaktadır.

CRUD işlevselliğine sahip bir REST API istiyorsunuz ve bu tam olarak restSQL'in tatlı noktasıdır. Bunu kod olmadan yapabilirsiniz. SQL Kaynaklarınızı XML dosyalarıyla tanımlayın ve tam CRUD özelliği ile bunlara karşı HTTP çağrıları yapmaya başlayın.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.