【问题标题】:Create API to be consumed by Website and Mobile [closed]创建供网站和移动设备使用的 API [关闭]
【发布时间】:2015-08-07 12:53:48
【问题描述】:

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

例如,在尝试为 Web 和移动设备创建 API 时,我想到了以下几点:

  1. 创建数据库
  2. 创建 API
  3. 创建网站以使用 API
  4. 创建移动版本以使用 API

换句话说,我可以创建一个单一的 API 端点,比如这个:

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

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

http://site.ne/register.php - 网站
http://site.ne/api/register - 手机

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

请引导我举一些简单的例子。如果有人之前也遇到过同样的问题并取得了胜利,请分享您的解决方案。

【问题讨论】:

  • 第一个模式看起来不错。我不是这方面的专家,但我认为你想多了。
  • 我下定决心,我正在构建一个以 api 为中心的解决方案,正如这里所讨论的 stackoverflow.com/questions/9453359/…,我也决定简单地说,每个解决方案都是情境化的,解决方案 a 可以解决问题 a,并且可能(但并非总是)解决问题 b。作为真正的工作很重要的解决方案提供商。真正重要的是我们选择的解决方案。正如斯蒂芬评论的那样。不要想太多。

标签: javascript php android api


【解决方案1】:

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

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

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

如果您认为 URL 代表资源,那么将“api”添加到您的 URL 是一种反模式。如果您有兴趣阅读有关 REST 的更多信息,那么我推荐 Jim Webber 的《Rest in Practice》。无论您选择构建自己的 API,我仍然推荐一种不知道它所服务的客户端的接口。

【讨论】:

    【解决方案2】:

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

    这个所谓的 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 端点可以而且应该被移动和网络使用。 除非您返回不同的值,否则无需为单一功能使用多个端点。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-06
      • 1970-01-01
      • 1970-01-01
      • 2013-04-05
      • 2011-03-17
      相关资源
      最近更新 更多