万网织梦网站如何接入APP?

99ANYc3cd6
预计阅读时长 27 分钟
位置: 首页 织梦建站 正文

核心概念解析

在开始之前,我们需要明确几个关键点:

万网织梦网站接入APP
(图片来源网络,侵删)
  1. 万网织梦网站:这是一个基于PHP和MySQL的建站系统,它的内容(文章、产品、图片等)都存储在网站的数据库里。
  2. APP:这里我们主要指原生APP(iOS/Android)或混合APP(如使用React Native, Flutter, uni-app等开发),APP是用户直接交互的客户端。
  3. API接口:这是连接网站和APP的“桥梁”,网站需要开放一些接口,允许APP通过HTTP请求来获取或提交数据。“获取最新10篇文章列表”、“获取文章详情”、“提交用户留言”等。

为什么不能让APP直接访问网站?

  • 数据安全:直接暴露数据库信息给APP,极易被攻击,导致数据泄露。
  • 协议不匹配:网站通常使用HTTP/HTTPS协议,而APP内部通信更倾向于使用轻量级的JSON格式数据。
  • 性能与体验:直接解析网页HTML在APP中非常困难且效率低下,无法提供原生流畅的体验。

实现步骤详解

整个过程可以分为三个主要阶段:

准备工作

  1. 确认网站环境

    • 确保你的万网织梦网站可以正常访问。
    • 确保你有服务器的管理权限(如FTP/SFTP、服务器后台),以便后续修改文件。
    • 确保你的PHP环境支持cURLfile_get_contents等函数,这是发起HTTP请求的基础。
  2. 选择APP开发方式

    万网织梦网站接入APP
    (图片来源网络,侵删)
    • 原生开发:使用Android的Java/Kotlin或iOS的Swift/Objective-C,优点是性能最好,体验最流畅;缺点是开发成本高,需要维护两套代码。
    • 混合开发:使用uni-appReact NativeFlutter等框架,优点是“一套代码,多端运行”(iOS/Android/小程序等),开发效率高;缺点是性能相比原生稍差,但对于大多数内容展示类网站完全足够。
    • 小程序/H5:如果你的需求是“类APP”体验,可以考虑直接开发微信小程序或H5页面,小程序的API调用方式与APP类似。
  3. 准备APP开发工具

    根据你选择的开发方式,安装相应的开发环境,如Android Studio、Xcode、HBuilderX等。

为网站创建API接口

这是最关键的一步,我们需要在织梦网站的后端创建PHP文件,这些文件负责从数据库中取出数据,并以JSON格式返回给APP。

示例:创建一个获取文章列表的API

万网织梦网站接入APP
(图片来源网络,侵删)

假设我们要获取网站首页的文章列表。

  1. 找到并分析织梦的数据查询代码

    • 登录你的网站后台,找到首页模板文件(通常路径是 /templets/default/index.html)。
    • 复制其中用于调用文章列表的PHP代码,它看起来可能像这样:
      {dede:arclist titlelen='40' row='10'}
          <li>
              <a href='[field:arcurl/]'>[field:title/]</a>
              <span>[field:pubdate function="MyDate('Y-m-d',@me)"/]</span>
          </li>
      {/dede:arclist}
    • 这里的{dede:arclist...}是织梦的标签,底层会执行相应的SQL查询。
  2. 创建API文件

    • 在你的网站根目录下,创建一个新的文件夹,api
    • api 文件夹里,创建一个新的PHP文件,get_articles.php
  3. 编写API逻辑

    • 打开 get_articles.php,编写PHP代码来获取数据并返回JSON。
    <?php
    // 设置响应头,告诉客户端返回的是JSON格式
    header('Content-Type: application/json; charset=utf-8');
    // 1. 引入织梦的核心文件,以便使用其数据库连接和函数
    // 注意:这里的路径需要根据你的网站结构调整
    require_once (dirname(__FILE__) . "/include/common.inc.php");
    // 2. 准备要返回的数据数组
    $articles = array();
    // 3. 执行数据库查询,获取文章列表
    // 这里我们直接使用织梦的底层SQL查询函数,更灵活
    // 查询10篇最新发布的文章
    $sql = "SELECT id, title, arcurl, pubdate FROM dede_archives WHERE channel = 1 ORDER BY pubdate DESC LIMIT 10";
    $dsql->SetQuery($sql);
    $dsql->Execute();
    // 4. 遍历查询结果,并格式化数据
    while ($row = $dsql->GetArray()) {
        // 对日期进行格式化,方便APP端使用
        $formatted_date = date('Y-m-d H:i:s', $row['pubdate']);
        // 将每篇文章的数据存入数组
        $articles[] = array(
            'id' => $row['id'],
            'title' => $row['title'],
            'url' => $row['arcurl'], // 文章在网站上的链接
            'publish_time' => $formatted_date
        );
    }
    // 5. 将PHP数组转换为JSON字符串并输出
    // JSON_UNESCAPED_UNICODE 确保中文字符不被转义
    echo json_encode($articles, JSON_UNESCAPED_UNICODE);
    ?>
  4. 测试API

    • 在浏览器中访问 http://你的域名/api/get_articles.php
    • 如果一切正常,你应该能看到类似下面这样的JSON数据:
      [
          {
              "id": "123",
              "title": "欢迎使用万网织梦",
              "url": "/a/2025/123.html",
              "publish_time": "2025-10-27 10:00:00"
          },
          {
              "id": "122",
              "title": "APP接入教程",
              "url": "/a/2025/122.html",
              "publish_time": "2025-10-26 15:30:00"
          }
      ]

其他API示例

  • 获取文章详情 (get_article_detail.php): 接收一个文章ID参数,查询dede_archivesdede_addonarticle(如果使用了文章模型)表,返回文章标题、内容、图片等。
  • 获取分类列表 (get_categories.php): 查询dede_arctype表,返回所有栏目分类。

APP端调用API并展示数据

我们以 uni-app 为例,说明如何在APP中调用上面创建的API。

  1. 发起网络请求: uni-app提供了uni.request() API来发起网络请求。

    // 在页面的 onLoad 函数中调用
    onLoad() {
        this.fetchArticles();
    },
    methods: {
        fetchArticles() {
            uni.request({
                // 替换成你的API地址
                url: 'http://你的域名/api/get_articles.php', 
                method: 'GET',
                success: (res) => {
                    // 请求成功,res.data 就是服务器返回的JSON数据
                    if (res.statusCode === 200) {
                        console.log('获取文章成功:', res.data);
                        this.articleList = res.data; // 将数据赋值给页面变量
                    } else {
                        console.error('服务器返回错误:', res.statusCode);
                        uni.showToast({
                            title: '获取数据失败',
                            icon: 'none'
                        });
                    }
                },
                fail: (err) => {
                    // 请求失败,可能是网络问题或服务器宕机
                    console.error('网络请求失败:', err);
                    uni.showToast({
                        title: '网络连接失败',
                        icon: 'none'
                    });
                }
            });
        }
    }
  2. 在页面中展示数据: 在页面的.vue文件中,使用v-for指令循环渲染数据。

    <template>
        <view class="container">
            <view class="article-item" v-for="item in articleList" :key="item.id" @click="goToDetail(item.url)">
                <text class="title">{{ item.title }}</text>
                <text class="date">{{ item.publish_time }}</text>
            </view>
        </view>
    </template>
    <script>
    export default {
        data() {
            return {
                articleList: [] // 用于存储从API获取的文章列表
            }
        },
        onLoad() {
            this.fetchArticles();
        },
        methods: {
            fetchArticles() {
                // ... 上面的 uni.request 代码放在这里 ...
            },
            goToDetail(url) {
                // 点击文章后,可以跳转到H5页面或使用web-view组件加载文章
                uni.navigateTo({
                    url: '/pages/webview/webview?url=' + encodeURIComponent(url)
                });
            }
        }
    }
    </script>
    <style>
    .article-item {
        padding: 20rpx;
        border-bottom: 1px solid #eee;
    }{
        font-size: 32rpx;
        font-weight: bold;
        display: block;
        margin-bottom: 10rpx;
    }
    .date {
        font-size: 24rpx;
        color: #999;
    }
    </style>

重要注意事项

  1. 跨域问题

    • 当你的APP(http://app.example.com)请求网站(http://web.example.com)的API时,会触发浏览器的同源策略,导致请求失败。
    • 解决方案:在你的网站服务器上配置CORS(跨域资源共享)。
      • Apache服务器:在 .htaccess 文件中添加:
        Header set Access-Control-Allow-Origin "*"
        Header set Access-Control-Allow-Methods "GET, POST, OPTIONS"
        Header set Access-Control-Allow-Headers "Content-Type"
      • Nginx服务器:在 nginx.conf 中添加:
        add_header 'Access-Control-Allow-Origin' '*';
        add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
        add_header 'Access-Control-Allow-Headers' 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization';
  2. API安全

    • 不要直接暴露核心SQL:上面的例子是为了教学,直接写SQL有注入风险,最好使用织梦自带的查询函数,并对用户输入进行过滤。
    • 增加身份验证:为了防止API被恶意调用,你应该增加一个简单的验证机制,在请求时附带一个token参数,这个token是你在APP端和服务器端约定好的一个密钥,API文件在处理请求时,先验证token是否正确。
    • API版本控制:当你的API需要升级时,可以设计成 api/v1/get_articles.phpapi/v2/get_articles.php,这样不会影响旧版本的APP。
  3. 性能优化

    • 数据缓存:对于不经常变动的数据(如文章列表),可以在APP端进行缓存,避免每次都请求服务器。
    • 分页加载:不要一次性请求所有数据,采用“下拉加载更多”或“上拉刷新”的分页模式,减少服务器压力和APP的流量消耗。

将万网织梦网站接入APP,是一个典型的“前后端分离”思想的实践。

总流程网站端(后端):修改PHP代码,创建能返回JSON的API接口。 APP端(前端):使用网络请求库(如uni.request)调用API,获取JSON数据,并用UI组件展示出来。

这个过程对于有一定开发基础的人来说是完全可行的,如果你对编程不熟悉,可以考虑寻找专业的开发者或外包团队来完成这项工作。

-- 展开阅读全文 --
头像
dede为何无法生成首页html?
« 上一篇 今天
dede系统用户管理为何显示空白?
下一篇 » 今天

相关文章

取消
微信二维码
支付宝二维码

目录[+]