创建由Website和Mobile使用的API

时间:2015-05-26 02:36:22

标签: javascript php android api

在设计一个易于被不同客户(网络和移动设备)使用的API时,我应该为每个客户创建一个端点吗?

例如,在尝试为网络和移动设备创建API时,我想到了以下内容:

  1. 创建数据库
  2. 创建API
  3. 创建网站以使用API​​
  4. 创建移动版本以使用API​​
  5. 换句话说,我可以创建一个单一的API端点,例如:

    http://site.ne/api/register - 适用于网站和移动设备

    或者,我应该为网站创建一个单独的处理程序,比如说。

    http://site.ne/register.php - 网站
    http://site.ne/api/register - 移动

    我相信Facebook,Twitter等正在做前者。如果这是正确的事情,我只是想清除我的疑虑并强化我的理解。

    请介绍一些简单的例子。如果有人在之前使用相同的方法进行了缓冲并获得胜利者,请分享您的解决方案。

2 个答案:

答案 0 :(得分:0)

无论客户如何,您的API都应该运行相同的API。这就是为什么RESTful API很受欢迎的原因。您正在为所有客户构建一项服务。以这种方式构建API使其更具可维护性和可扩展性(假设它是无状态的)。这包含了网络的本质。

考虑到这一点,您的客户希望与您的服务进行互动。它想要检索数据并发回数据(然后使用HTTP动词来表示意图)。如何表示这些数据是客户的责任,并且与服务无关。

Web客户端可以进行Ajax调用以检索数据并以HTML格式呈现。 HTML可以响应以支持多个设备/屏幕。胖客户端也可以进行Web调用并根据需要显示它。每次你需要另一个客户端时,构建它。服务保持不变。客户也可能是其他服务 - 这有帮助吗?

如果您认为某个网址代表了某个资源,那么请添加' api'你的网址是一个反模式。如果您有兴趣阅读有关REST的更多信息,那么我建议Jim Webber在实践中休息。无论您选择构建API,我仍然建议您使用一个不知道其所服务客户端的接口。

答案 1 :(得分:0)

通过采用REST架构,您可以统一创建供REST客户端使用的API。

这个所谓的REST客户端可以是Web或移动的,通常使用JSON作为返回值。

我们以Facebook的Graph GET用户ID API(graph.facebook.com/{user-id})为例:

我们希望获得有关用户ID的一些信息:bgolub

GET https://graph.facebook.com/bgolub将返回以下JSON

  {
    "id": "15500414",
    "first_name": "Benjamin",
    "last_name": "Golub",
    "link": "http://www.facebook.com/15500414",
    "name": "Benjamin Golub",
    "relationship_status": "Married",
    "significant_other": {
      "id": "15500304",
      "name": "Megen Vo"
    }
  }

然后在网络(Javascript)中,您可以执行以下操作:

FB.api('/bgolub', function(response) {
  console.log(JSON.stringify(response));
  // do something more such as save the id to your DB
});

对于Android,您可以创建REST客户端(例如使用Retrofit),例如:

public class MyClient {
  private static String URL_FEED = "https://graph.facebook.com";
  private static MyClientInterface sMyClientInterface;

  public static MyClientInterface getMyClient() {
    if (sMyClientInterface == null) {
        RestAdapter restAdapter = new RestAdapter.Builder()
                .setEndpoint(URL_FEED)
                .build();

          sMyClientInterface =   restAdapter.create(MyClientInterface.class);
    }

      return sMyClientInterface;
  }


  public interface MyClientInterface {
      @GET("/bgolub")
      void getBenGolub(Callback<Object> callback);
  }
}

重点是:移动和网络都可以并且应该使用一个API端点。 除非您返回不同的值,否则不需要为单个功能使用多个端点。