是否存在REST API可查询任意实体类型记录的公开状态?
查询实体记录公开状态的REST API方案
当然存在这类REST API——不管是自定义后端还是成熟的第三方平台,通常都会提供获取实体记录公开状态的接口,或者在实体详情接口中包含状态字段,方便前端根据状态执行对应逻辑。
通用接口实现思路
如果是自己搭建后端,推荐两种接口设计方式:
- 单条记录状态查询:
请求:GET /api/{entity-type}/{record-id}/public-status
返回示例:{"isPublic": true, "entityType": "article", "recordId": "123"} - 批量记录状态查询:
请求:GET /api/public-status?entityType=article&recordIds=123,456,789
返回示例:[ {"recordId": "123", "isPublic": true}, {"recordId": "456", "isPublic": false}, {"recordId": "789", "isPublic": true} ]
前端JavaScript调用示例
单条记录状态查询
async function checkRecordVisibility(entityType, recordId) { try { const res = await fetch(`/api/${entityType}/${recordId}/public-status`, { method: 'GET', headers: { 'Content-Type': 'application/json', // 若需权限验证,添加token 'Authorization': `Bearer ${localStorage.getItem('authToken')}` } }); if (!res.ok) throw new Error(`请求失败:${res.status}`); const { isPublic } = await res.json(); // 根据状态执行对应操作 if (isPublic) { // 记录公开:显示内容、启用分享功能等 document.getElementById(`content-${recordId}`).style.display = 'block'; document.getElementById(`share-btn-${recordId}`).disabled = false; } else { // 记录未公开:隐藏内容、提示权限不足等 document.getElementById(`content-${recordId}`).innerHTML = '<p>该内容未公开,请登录后查看</p>'; document.getElementById(`share-btn-${recordId}`).disabled = true; } return isPublic; } catch (err) { console.error('查询状态出错:', err); // 错误处理:比如提示用户 alert('无法获取内容状态,请稍后重试'); return false; } } // 调用示例 checkRecordVisibility('article', '789');
批量记录状态查询
async function batchCheckVisibility(entityType, recordIds) { const idsParam = recordIds.join(','); try { const res = await fetch(`/api/public-status?entityType=${entityType}&recordIds=${idsParam}`, { method: 'GET', headers: { 'Content-Type': 'application/json', 'Authorization': `Bearer ${localStorage.getItem('authToken')}` } }); if (!res.ok) throw new Error(`批量查询失败:${res.status}`); const statusList = await res.json(); // 遍历处理每条记录 statusList.forEach(({ recordId, isPublic }) => { const contentEl = document.getElementById(`content-${recordId}`); if (isPublic) { contentEl.style.display = 'block'; } else { contentEl.innerHTML = '<p>该内容未公开</p>'; } }); return statusList; } catch (err) { console.error('批量查询出错:', err); alert('批量获取内容状态失败'); return []; } } // 调用示例 batchCheckVisibility('user', ['101', '102', '103']);
实用提示
- 若使用第三方平台(如CMS、CRM),直接查看官方文档,通常实体详情接口会返回
visibility、is_public这类字段,无需单独调用状态接口。 - 务必做好接口权限控制,避免未授权用户查询敏感记录的状态。
- 前端要处理网络异常、接口返回错误码等情况,保证页面逻辑稳定。
内容的提问来源于stack exchange,提问作者Dishant
相关产品推荐
相关产品推荐

