Làm thế nào để viết một API REST?


82

Tôi đang viết một ứng dụng iPhone như một dự án sở thích và nó sẽ cần một dịch vụ web để cung cấp dữ liệu cho nó. Nó không khác lắm so với những gì tôi làm ở nơi làm việc, nhưng tại nơi làm việc, tôi chỉ viết các khung nhìn và bộ điều khiển. Người khác chịu trách nhiệm viết mô hình và thường là khách hàng cung cấp dịch vụ web.

Tôi đã thực hiện một số lập trình web trước đây, khi mọi người đều sử dụng MySQL và PHP, vì vậy kỹ năng của tôi hơi lỗi thời, nhưng tôi tự tin rằng tôi sẽ có thể kéo nó bằng cách sử dụng các kỹ thuật tôi đã biết. Tuy nhiên, tôi không muốn lãng phí thời gian của mình khi sử dụng các công cụ lỗi thời. Tôi đã nhận ra rằng hiện đại nhất là viết một API REST. Tôi đã nghĩ rằng sẽ có một số khung công tác khá tốt trên mạng này có thể cung cấp cho bạn một API REST với chức năng CRUD ngay sau khi bạn xác định một mô hình.

Tôi đoán câu hỏi của tôi là: Cách nhanh nhất để thiết lập và chạy API REST là gì? Tôi thực sự chỉ muốn tập trung vào việc viết ứng dụng iPhone và không dành quá nhiều thời gian cho API này. Sẽ thật tuyệt nếu tôi cũng có thể quản trị web và lịch sử sửa đổi. Tôi cũng nên nói thêm rằng API không được công khai, vì vậy hỗ trợ xác thực cũng sẽ rất tốt.

Chỉ để được rõ ràng. Tôi sẽ không bận tâm đến một khuôn khổ PHP. Trong thực tế, nó có thể tốt hơn vì tôi biết rằng lưu trữ hiện tại của tôi hỗ trợ nó.


1
REST có lẽ không phải là thứ bạn thực sự muốn: medium.com/@trevorhreed/…
Trevor

2
Bạn có thể sử dụng tập lệnh PHP 66 dòng này mà tôi đã viết.
mevdschee

Đã trả lời 5 năm sau đó 8-)
JustOnUnderMillions

Câu trả lời:


42

BIÊN TẬP:

Các liên kết bên dưới dường như tốt trong 3 năm không còn hoạt động nữa nên tôi đã đi và tìm thấy một vài hướng dẫn mới mà tôi nghĩ sẽ tồn tại trong một thời gian. Những điều này có trên trang Ray Wenderlich, một trang hướng dẫn dành cho nhà phát triển ios rất có uy tín. Bài viết đầu tiên thực sự đề cập đến các liên kết bị hỏng bên dưới nhưng nó hoàn chỉnh bên trong:

Cách viết một dịch vụ web PHP / MySQL đơn giản cho ứng dụng iOS

và cái thứ hai có một chút thay đổi. Nó đã sử dụng parse.com trên backend và AFNetworking. Cả hai đều khá xuất sắc.

Cách đồng bộ hóa dữ liệu cốt lõi với dịch vụ web - Phần 1


Tôi đã sửa các liên kết bị hỏng bên dưới bằng cách tìm các bài viết trong đường trở lại máy. Mọi người dường như thích các liên kết vì vậy tôi sẽ giữ chúng. Các liên kết ở trên sẽ cung cấp nhiều thức ăn hơn cho việc suy nghĩ.


Tôi đang làm điều tương tự với ứng dụng iphone của mình. Tôi tìm thấy bài viết này về cách xây dựng RESTful API trong PHP:

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

và cũng có một bài viết tiếp theo ở đây:

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

với một liên kết đến mã nguồn ở cuối bài viết.


2
Những liên kết này có vẻ như chúng đã hết thời gian chờ. Nếu điều đó xảy ra với bất kỳ ai khác, tôi không chắc. : /
Augie Gardner

8

Tôi đã lập trình một API REST trong ZEND Framework bằng Zend_Rest_Controller, trên iPhone tôi đã sử dụng ASIHTTPRequest . Kinh nghiệm của tôi với cả hai nơi tốt. Lúc đầu, tôi gặp một số khó khăn khi thiết lập ZEND và kết nối nó với mySQL, nhưng khi tôi tìm ra cách thực hiện, tôi có thể viết API rất nhanh. Tôi có thể chia sẻ thêm thông tin với bạn nếu bạn có bất kỳ câu hỏi nào khác.

CHỈNH SỬA: Dường như không có tài liệu chính thức về Zend_Rest_Controller. Liên kết này mô tả cách sử dụng nó để tạo API của bạn. Bạn chỉ cần tắt hiển thị trong init()lớp con của mình và triển khai các phương thức cho mỗi cuộc gọi REST.


Tôi không thấy bất kỳ ZEND_Rest_Controller nào trên trang Zend. Tôi thấy ZEND_Rest_Server. Đây có phải là một trong những bạn đang nói về?
Dmitri

2
Hãy xem ở đây để có một khởi đầu tốt về cách sử dụng zend_rest_controller: techchorus.net/create-restful-application-using-zend-framework. Tạo một api nghỉ thật dễ dàng với lớp học này
Philipp

Đây dường như là ít nhiều chính xác những gì tôi cần. Tôi sẽ thử và nếu thành công, tôi sẽ chấp nhận đây là câu trả lời của mình. Cảm ơn.
Erik B

4
Tôi đoán anh ấy đã không thành công ...: D
user151841

8

Chỉ cho bạn biêt thôi:

Tôi đã sử dụng Ruby on Rails.

CHỈNH SỬA: Vì câu trả lời này đã bị phản đối vì không cung cấp lý do đằng sau việc chọn Ruby on Rails và cũng không có hướng dẫn về cách viết API REST với nó, tôi nghĩ tôi sẽ cung cấp cho bạn động lực và một số hướng dẫn đơn giản.

Tôi bắt đầu đọc một cuốn sách về Ruby on Rails và nhận ra rằng tất cả những gì tôi cần làm là sử dụng giàn giáo và tôi nhận được một API JSON REST miễn phí.

Đây là hướng dẫn hữu ích để bạn bắt đầu: http://guides.rubyonrails.org/getting_started.html

Khi bạn thiết lập và chạy môi trường Ruby on Rails, việc tạo API REST của bạn không khó hơn là chạy:

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

(Ví dụ từ liên kết trên.) Tôi cũng thấy rằng Rails rất dễ dàng và miễn phí để triển khai cho heroku , có nghĩa là tôi không phải trả tiền cho việc lưu trữ cho API REST rất cơ bản, ít lưu lượng truy cập của mình. Có nhiều lý do khác khiến tôi rất vui khi làm việc với Ruby on Rails, nhưng điều đó nằm ngoài ngữ cảnh của câu hỏi này.


10
tự cho mình một câu trả lời và sau đó cho nó một dấu kiểm người đàn ông hình thức xấu Hình thức RẤT xấu.
thenetimp

29
@thenetimp Không có gì tệ khi trả lời câu hỏi của chính bạn. Trên thực tế, nó được khuyến khích, miễn là đó là một câu trả lời đúng và nó không được đưa ra bởi bất kỳ ai khác. Bạn không nhận được bất kỳ đại diện nào khi chấp nhận câu trả lời của chính bạn, vì vậy tôi thực sự không biết bạn có thể có gì để chống lại nó.
Erik B

3
sẽ tốt hơn nếu bạn đưa ra lý do của mình để chọn nó
mustafa

4
@Nate Tôi muốn giới thiệu Ruby on Rails cho bất kỳ ai muốn viết API REST, vì vậy tôi sẽ không xóa câu trả lời của mình. Tuy nhiên, tôi đã đọc phản hồi của bạn và cập nhật câu trả lời của tôi. Tôi hy vọng nó làm hài lòng bạn.
Erik B

2
@ DennisKrøger nếu câu hỏi là "Làm thế nào để viết một api REST?" thì "Tôi đã sử dụng RoR. Đây là hướng dẫn để bắt đầu trên giàn giáo của họ" hoàn toàn là một câu trả lời thích hợp.
Mattygabe

8

Tôi đã làm theo một hướng dẫn khá đơn giản để tạo các API RESTful với PHP:

Corey Maynard - Tạo một API RESTful với PHP

Khái niệm chính bao gồm:

  • một lớp trừu tượng xử lý việc phân tích cú pháp của URI và trả về phản hồi, và
  • một lớp cụ thể chỉ bao gồm các điểm cuối cho API.

3

Còn Python thì sao?

Tôi sẽ sử dụng Python, Django và Piston.

  1. Tôi sẽ tạo các mô hình Django từ DB hiện có của bạn bằng cách sử dụng Inspectordb .
  2. Thêm quản trị viên Django vào mô hình của bạn.
  3. Thêm Django Piston vào ứng dụng của bạn.
  4. Lợi nhuận.

Nếu không có kinh nghiệm với Python hoặc Django, có lẽ bạn sẽ mất một ngày để phát triển giải pháp này và tất cả mã đều được kiểm tra và chứng minh là hoạt động .



1

Kiểm tra lớp PHP sau đây theo sau MVC. http://www.phpclasses.org/package/5080-PHP-Implement-REST-Web-services-servers.html

Hi vọng điêu nay co ich.


7
Tôi thực sự không khuyến khích sử dụng bất kỳ thứ gì từ phpclasses.org. Nhiều lớp học trên trang web đó không được kiểm tra, không an toàn, được viết bởi những đứa trẻ có tập lệnh. Tìm nơi nào đó có uy tín hơn như PEAR hoặc Zend
Dmitri

13
Hơn 3000 nhà phát triển PHP đã gửi các gói đến trang PHPClasses. Một số có khả năng hơn nhiều so với những người khác. Nhiều người thậm chí còn là những người đóng góp cho PEAR và Zend. Việc bảo mọi người không sử dụng một gói được phân phối trong trang web đó chỉ vì bạn tìm thấy một số gói mà bạn nói là chưa được kiểm tra và không an toàn, là định kiến ​​thuần túy. Gói được @src đề xuất tình cờ là gói được xếp hạng cao nhất. Sẽ là khôn ngoan hơn nếu bạn nhìn vào mã gói hoặc ít nhất là xếp hạng của người dùng trước khi bạn quyết định tổng quát hóa mọi thứ chỉ vì nó được phân phối trong trang web.
mlemos

0

Nếu bạn đã biết PHP, không có gì sai với phần phụ trợ PHP / MySQL. Bạn có thể gửi tất cả phản hồi ở định dạng xml plist tương thích với iPhone và ngay lập tức chuyển phản hồi thành cấu trúc dữ liệu NSDictionary / NSArray / NSNumber với đoạn mã ngắn này:

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

Tôi cũng sử dụng gói ASIHTTP để tạo URL, gửi yêu cầu không đồng bộ và nhận phản hồi, tôi thực sự khuyên bạn nên sử dụng gói này:

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


0

Bạn nên sử dụng bất kỳ ngôn ngữ nào bạn cảm thấy thoải mái cho dịch vụ web. Bất kỳ ngôn ngữ nào có thể hình thành phản hồi REST cho các yêu cầu đều tốt.

Điều đó nói rằng, nếu bạn muốn một thứ gì đó chạy nhanh, tôi khuyên bạn nên sử dụng Python trên Google App Engine. Nó miễn phí và bạn có thể sử dụng Java thay vì Python nếu bạn muốn. App Engine hỗ trợ xác thực bằng OpenID và / hoặc Tài khoản Google (không chắc liệu chúng có loại trừ lẫn nhau hay không) để giúp mọi thứ dễ viết mã hơn.

Đối với việc thực hiện các yêu cầu trên thiết bị iOS, tôi khuyên bạn nên sử dụng ASIHTTPRequest .


0

Một lựa chọn khác là restSQL, một khung công tác bền bỉ siêu nhẹ. Xem http://restsql.org . Nó hỗ trợ MySQL và PostgreSQL và chạy trong một vùng chứa Java EE tiêu chuẩn, ví dụ: Apache Tomcat.

restSQL là một lớp truy cập dữ liệu rất độc đáo. restSQL không phải là một dạng xem hướng đối tượng của cơ sở dữ liệu. Nó trình bày "khung nhìn" phẳng hoặc phân cấp của các bảng cơ sở dữ liệu quan hệ. Các chế độ xem này có thể truy vấn và có thể cập nhật thông qua một API Java hoặc HTTP dựa trên REST đơn giản. Giao diện HTTP dựa trên các nguyên tắc REST, sử dụng các tính năng có sẵn của HTTP, thay vì trừu tượng hóa chúng.

Bạn muốn có một 'API REST với chức năng CRUD' và đó chính xác là điểm tuyệt vời của RestSQL. Bạn có thể làm điều này mà không cần mã. Chỉ cần xác định Tài nguyên SQL của bạn thông qua các tệp XML và bắt đầu thực hiện các cuộc gọi HTTP chống lại chúng với khả năng CRUD đầy đủ.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.